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

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

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

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配置:web

<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網絡

相關文章
相關標籤/搜索