HtmlUnit+Jsoup 解決爬蟲無法解析執行javascript的問題


本人最近在研究爬蟲。作為一個新手。研究了些爬蟲框架,發現所有開源的爬蟲框架很多,功能也很齊全,但唯獨遺憾的是,目前還沒有發現那個爬蟲對js完美的解釋並執行。看了淺談網絡爬蟲爬js動態加載網頁(二)之后很有感慨,首先對博主的鑽研精神季度敬佩。雖然該文中第二和第三種方案不怎么靠譜,但能想到這些方案,說明博主的思維發散性很強,不會局限於單方向鑽牛角尖式的思考。不過很遺憾,因為我就是這樣的人。我始終覺得博主對於HtmlUnit的了解不夠深入(也可能是我的誤解)。於是就開始鑽牛角尖了。看了HtmlUnit的簡介之后,我有一種預感,認為HtmlUnit沒理由不能支持Js的自動解釋於執行,事實證明了我的想法。 廢話多說無益,

這里拿地址【http://cq.qq.com/baoliao/detail.htm?294064】來測試,通過查看該頁面源碼,可以發現,該頁面文章標題,內容,瀏覽量都是采用占位符的形式,在頁面加載時,通過js替換之,下面代碼獲取該文章瀏覽量字段。

public void testCrawler() throws Exception {  
        /**HtmlUnit請求web頁面*/  
        WebClient wc = new WebClient();  
        wc.getOptions().setJavaScriptEnabled(true); //啟用JS解釋器,默認為true  
        wc.getOptions().setCssEnabled(false); //禁用css支持  
        wc.getOptions().setThrowExceptionOnScriptError(false); //js運行錯誤時,是否拋出異常  
        wc.getOptions().setTimeout(10000); //設置連接超時時間 ,這里是10S。如果為0,則無限期等待  
        HtmlPage page = wc.getPage("http://cq.qq.com/baoliao/detail.htm?294064");  
        String pageXml = page.asXml(); //以xml的形式獲取響應文本  
  
        /**jsoup解析文檔*/  
        Document doc = Jsoup.parse(pageXml, "http://cq.qq.com");   
        Element pv = doc.select("#feed_content span").get(1);  
        System.out.println(pv.text());  
        Assert.assertTrue(pv.text().contains("瀏覽"));  
  
        System.out.println("Thank God!");  
    } 

附上maven配置:

<dependency>  
<!-- jsoup HTML parser library @ http://jsoup.org/ -->  
<groupId>org.jsoup</groupId>  
<artifactId>jsoup</artifactId>  
<version>1.7.2</version>  
</dependency>  
<dependency>  
<groupId>net.sourceforge.htmlunit</groupId>  
<artifactId>htmlunit</artifactId>  
<version>2.13</version>  
</dependency>  

 

更多信息請查看個人博客:http://www.iamcoder.net


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM