天天看點

HtmlUnit+Jsoup學習總結

一、網頁資料大概分為三類:

1.靜态網頁

所有内容都寫在Html标簽中,可以從網頁源代碼中直接查找到資料。

2.動态網頁

資料是通過JavaScript動态加載顯示到<body>中,直接查找源代碼不能找到資料。

3.登陸網頁

3.1 無驗證碼登陸

需要通過登陸後才可以檢視擷取網頁資料。(包括靜态、動态)

3.2 有驗證碼登陸(暫時還未研究)

驗證碼目前形勢也較多:

傳統驗證圖檔輸入

拖動驗證

點選圖中某些字

短信驗證

計算圖檔算術結果

....

二、爬蟲擷取資料步驟:

1. 通過http協定,擷取(下載下傳)網頁(起始頁)

2. 解析網頁:

2.1 解析網頁連結,加入爬隊列(去重處理,标記已爬取連結)

2.2 取得需要的資料

3. 儲存資料

三、爬取技術選取:HtmlUnit+Jsoup

采用htmlunit擷取網頁,并解析執行js,渲染頁面

采用jsoup解析網頁,擷取資料和連結

Htmlunit常用參數設定:

參數設定如下:

          // 1建立WebClient

WebClient webClient=new WebClient(BrowserVersion.CHROME);

     // 2 啟動JS

          webClient.getOptions().setJavaScriptEnabled(true);

         // 3 禁用Css,可避免自動二次請求CSS進行渲染

          webClient.getOptions().setCssEnabled(false);

         // 4 啟動客戶端重定向

          webClient.getOptions().setRedirectEnabled(true);

         // 5 js運作錯誤時,是否拋出異常

          webClient.getOptions().setThrowExceptionOnScriptError(false);

         // 6 設定逾時

          webClient.getOptions().setTimeout(50000);

       //擷取網頁

  HtmlPage htmlPage = webClient.getPage(url);

         // 等待JS驅動dom完成獲得還原後的網頁

           webClient.waitForBackgroundJavaScript(10000);

         // 網頁內容

           Document doc=Jsoup.parse(htmlPage.asXml());

         //使用jsoup解析頁面

.....

         //關閉windows,釋放資源

               webClient.closeAllWindows();

更多參考:http://htmlunit.sourceforge.net/gettingStarted.html

http://htmlunit.sourceforge.net/apidocs/

http://www.cnblogs.com/luotinghao/p/3800054.html

http://blog.csdn.net/ldw220817/article/details/8790119

四、Jsoup常用函數

Document doc=Jsoup.parse(String html);//将html源碼文本,解析并生成DOM樹

doc.select(String cssQuery);

doc.getElementById();

更多參考:http://www.cnblogs.com/xiaoMzjm/p/3899366.html

http://tool.oschina.net/apidocs/apidoc?api=jsoup-1.6.3

https://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/

五、總結

1.js的執行還未研究透徹

2.驗證碼還未開始研究

3.準備研究webkit

4.終極目标:封裝自己的爬蟲