本人最近在研究爬蟲。做爲一個新手。研究了些爬蟲框架,發現全部開源的爬蟲框架不少,功能也很齊全,但惟獨遺憾的是,目前尚未發現那個爬蟲對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網絡