網絡爬蟲(網絡蜘蛛)之網頁抓取

如今有愈來愈多的人熱衷於作網絡爬蟲(網絡蜘蛛),也有愈來愈多的地方須要網絡爬蟲,好比搜索引擎、資訊採集、輿情監測等等,諸如此類。網絡爬蟲涉及到的技術(算法/策略)廣而複雜,如網頁獲取、網頁跟蹤、網頁分析、網頁搜索、網頁評級和結構/非結構化數據抽取以及後期更細粒度的數據挖掘等方方面面,對於新手來講,不是一朝一夕便能徹底掌握且熟練應用的,對於做者來講,更沒法在一篇文章內就將其說清楚。所以在本篇文章中,咱們僅將視線聚焦在網絡爬蟲的最基礎技術——網頁抓取方面。html

說到網頁抓取,每每有兩個點是不得不說的,首先是網頁編碼的識別,另一個是對網頁腳本運行的支持,除此以外,是否支持以POST方式提交請求和支持自動的cookie管理也是不少人所關注的重要方面。其實Java世界裏,已經有不少開源的組件來支持各類各樣方式的網頁抓取了,包括上面提到的四個重點,因此說使用Java作網頁抓取仍是比較容易的。下面,做者將重點介紹其中的六種方式。java

 

HttpClient
HttpClient 是 Apache Jakarta Common 下的子項目,能夠用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,而且它支持 HTTP 協議最新的版本和建議。
如下列出的是 HttpClient 提供的主要的功能,要知道更多詳細的功能能夠參見 HttpClient 的主頁。
 (1)實現了全部 HTTP 的方法(GET,POST,PUT,HEAD 等)
 (2)支持自動轉向
 (3)支持 HTTPS 協議
 (4)支持代理服務器web

   (5)支持自動的Cookies管理等算法

Java爬蟲開發中應用最多的一種網頁獲取技術,速度和性能一流,在功能支持方面顯得較爲底層,不支持JS腳本執行和CSS解析、渲染等準瀏覽器功能,推薦用於須要快速獲取網頁而無需解析腳本和CSS的場景。apache

範例代碼以下:編程

package cn.ysh.studio.crawler.httpclient;import org.apache.http.client.HttpClient;import org.apache.http.client.ResponseHandler;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.BasicResponseHandler;import org.apache.http.impl.client.DefaultHttpClient;/**
 * 基於HtmlClient抓取網頁內容
 *
 * @author www.yshjava.cn
 */publicclassHttpClientTest{publicstaticvoid main(String[] args)throwsException{//目標頁面String url ="http://www.yshjava.cn";//建立一個默認的HttpClientHttpClient httpclient =newDefaultHttpClient();try{//以get方式請求網頁http://www.yshjava.cnHttpGet httpget =newHttpGet(url);//打印請求地址System.out.println("executing request "+ httpget.getURI());//建立響應處理器處理服務器響應內容ResponseHandlerresponseHandler=newBasicResponseHandler();//執行請求並獲取結果String responseBody = httpclient.execute(httpget, responseHandler);System.out.println("----------------------------------------");System.out.println(responseBody);System.out.println("----------------------------------------");}finally{//關閉鏈接管理器
            httpclient.getConnectionManager().shutdown();}}}

 

Jsoup
jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套很是省力的API,可經過DOM,CSS以及相似於jQuery的操做方法來取出和操做數據。瀏覽器

網頁獲取和解析速度飛快,推薦使用。
 主要功能以下:
 1. 從一個URL,文件或字符串中解析HTML;
 2. 使用DOM或CSS選擇器來查找、取出數據;
 3. 可操做HTML元素、屬性、文本;服務器

範例代碼以下:cookie

package cn.ysh.studio.crawler.jsoup;import java.io.IOException;import org.jsoup.Jsoup;/**
 * 基於Jsoup抓取網頁內容
 * @author www.yshjava.cn
 */publicclassJsoupTest{publicstaticvoid main(String[] args)throwsIOException{//目標頁面String url ="http://www.yshjava.cn";//使用Jsoup鏈接目標頁面,並執行請求,獲取服務器響應內容String html =Jsoup.connect(url).execute().body();//打印頁面內容System.out.println(html);}}

 

HtmlUnit
htmlunit 是一款開源的java 頁面分析工具,讀取頁面後,能夠有效的使用htmlunit分析頁面上的內容。項目能夠模擬瀏覽器運行,被譽爲java瀏覽器的開源實現。這個沒有界面的瀏覽器,運行速度也是很是迅速的。採用的是Rhinojs引擎。模擬js運行。網絡

網頁獲取和解析速度較快,性能較好,推薦用於須要解析網頁腳本的應用場景。

範例代碼以下:  

package cn.ysh.studio.crawler.htmlunit;import com.gargoylesoftware.htmlunit.BrowserVersion;import com.gargoylesoftware.htmlunit.Page;import com.gargoylesoftware.htmlunit.WebClient;/**
 * 基於HtmlUnit抓取網頁內容
 *
 * @author www.yshjava.cn
 */publicclassHtmlUnitSpider{publicstaticvoid main(String[] s)throwsException{//目標網頁String url ="http://www.yshjava.cn";//模擬特定瀏覽器FIREFOX_3WebClient spider =newWebClient(BrowserVersion.FIREFOX_3);//獲取目標網頁Page page = spider.getPage(url);//打印網頁內容System.out.println(page.getWebResponse().getContentAsString());//關閉全部窗口
        spider.closeAllWindows();}}

 


Watij

Watij(發音wattage)是一個使用Java開發的Web應用程序測試工具,鑑於Watij的簡單性和Java語言的強大能力,Watij可以使您在真正的瀏覽器中完成Web應用程序的自動化測試。由於是調用本地瀏覽器,所以支持CSS渲染和JS執行。

網頁獲取速度通常,IE版本太低(6/7)時可能會引起內存泄露。

範例代碼以下:

package cn.ysh.studio.crawler.ie;import watij.runtime.ie.IE;/**
 * 基於Watij抓取網頁內容,僅限Windows平臺
 *
 * @author www.yshjava.cn
 */publicclassWatijTest{publicstaticvoid main(String[] s){//目標頁面String url ="http://www.yshjava.cn";//實例化IE瀏覽器對象
        IE ie =new IE();try{//啓動瀏覽器
            ie.start();//轉到目標網頁
            ie.goTo(url);//等待網頁加載就緒
            ie.waitUntilReady();//打印頁面內容System.out.println(ie.html());}catch(Exception e){
            e.printStackTrace();}finally{try{//關閉IE瀏覽器
                ie.close();}catch(Exception e){}}}}

 

Selenium
Selenium也是一個用於Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操做同樣。支持的瀏覽器包括IE、Mozilla Firefox、Mozilla Suite等。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試你的應用程序看是否可以很好得工做在不一樣瀏覽器和操做系統之上。測試系統功能——建立衰退測試檢驗軟件功能和用戶需求。支持自動錄製動做和自動生成。Net、Java、Perl等不一樣語言的測試腳本。Selenium 是ThoughtWorks專門爲Web應用程序編寫的一個驗收測試工具。

網頁獲取速度較慢,對於爬蟲來講,不是一個好的選擇。

範例代碼以下:

package cn.ysh.studio.crawler.selenium;import org.openqa.selenium.htmlunit.HtmlUnitDriver;/**
 * 基於HtmlDriver抓取網頁內容
 *
 * @author www.yshjava.cn
 */publicclassHtmlDriverTest{publicstaticvoid main(String[] s){//目標網頁String url ="http://www.yshjava.cn";HtmlUnitDriver driver =newHtmlUnitDriver();try{//禁用JS腳本功能
            driver.setJavascriptEnabled(false);//打開目標網頁
            driver.get(url);//獲取當前網頁源碼String html = driver.getPageSource();//打印網頁源碼System.out.println(html);}catch(Exception e){//打印堆棧信息
            e.printStackTrace();}finally{try{//關閉並退出
                driver.close();
                driver.quit();}catch(Exception e){}}}}

 

Webspec 

一個開源的帶有界面的Java瀏覽器,支持腳本執行和CSS渲染。速度通常。
 範例代碼以下:

package cn.ysh.studio.crawler.webspec;import org.watij.webspec.dsl.WebSpec;/**
 * 基於WebSpec抓取網頁內容
 *
 * @author www.yshjava.cn
 */publicclassWebspecTest{publicstaticvoid main(String[] s){//目標網頁String url ="http://www.yshjava.cn";//實例化瀏覽器對象WebSpec spec =newWebSpec().mozilla();//隱藏瀏覽器窗體
        spec.hide();//打開目標頁面
        spec.open(url);//打印網頁源碼System.out.println(spec.source());//關閉全部窗口
        spec.closeAll();}}


源碼下載:網絡爬蟲(網絡蜘蛛)之網頁抓取範例源碼

轉載源地址:http://www.cnblogs.com/chenying99/articles/3213533.html

相關文章
相關標籤/搜索