在很多行業中,要對行業資料進行分類匯總,及時分析行業資料,對於公司未來的發展,有很好的參照和橫向對比。所以,在實際工作,我們可能要遇到資料擷取這個概念,資料擷取的最終目的就是要獲得資料,提取有用的資料進行資料提取和資料分類匯總。
很多人在第一次瞭解資料擷取的時候,可能無從下手,尤其是作為一個新手,更是感覺很是茫然,所以,在這裡分享一下自己的心得,希望和大家一起分享技術,如果有什麼不足,還請大家指正。寫出這篇目的,就是希望大家一起成長,我也相信技術之間沒有高低,只有互補,只有分享,才能使彼此更加成長。
在網頁資料擷取的時候,我們往往要經過這幾個大的步驟:
①通過URL地址讀取目標網頁②獲得網頁源碼③通過網頁源碼抽取我們要提取的目的資料④對資料進行格式轉換,獲得我們需要的資料。
這是一個示意圖,希望大家瞭解
瞭解了基本流程,下來,我以一個案例具體實現如何提取我們需要的資料,對於資料提取可以用Regex進行提取,也可以用httpclient+jsoup進行提取,此處,暫且不講解httpclient+jsou提取網頁資料的做法,以後會對httpclient+jsoup進行專門的講解,此處,先開始講解如何用Regex對資料進行提取。
我在這裡找到一個網站:http://www.ic.net.cn/userSite/publicQuote/quotes_list.php 我們要對裡面的資料進行提取操作,我們要提取的最終結果是產品的型號、數量、報價、供應商,首先,我們看到這個網站整個頁面預覽
其次我們看網頁源碼結構:
上面源碼可以很清楚的可以看到整個網頁源碼結構,下來我們就對整個網頁資料進行提取
[java] view plain copy import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HTMLPageParser { public static void main(String[] args) throws Exception { //目的網頁URL地址 getURLInfo("http://www.ic.net.cn/userSite/publicQuote/quotes_list.php","utf-8"); } public static List<Product> getURLInfo(String urlInfo,String charset) throws Exception { //讀取目的網頁URL地址,擷取網頁源碼 URL url = new URL(urlInfo); HttpURLConnection httpUrl = (HttpURLConnection)url.openConnection(); InputStream is = httpUrl.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8")); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { //這裡是對連結進行處理 line = line.replaceAll("</?a[^>]*>", ""); //這裡是對樣式進行處理 line = line.replaceAll("<(\\w+)[^>]*>", "<$1>"); sb.append(line);