2015-08-19 27 views
2

如果頁面有無限滾動,我如何在java中抓取頁面的HTML?目前,我正在抓住一個頁面是這樣的:Java HTML解析無限滾動的頁面

URL url = new URL(stringUrl); 
URLConnection con = url.openConnection(); 
InputStream in = con.getInputStream(); 
String encoding = con.getContentEncoding(); 
encoding = encoding == null ? "UTF-8" : encoding; 
String html = IOUtils.toString(in, encoding); 
Document document = Jsoup.parse(html); 

不過,這並不返回任何與頁面的無限滾動部分相關內容。如何在HTML頁面上觸發此滾動,以便我的Jsoup文檔包含此部分?

+0

你可以給網站的網址。 –

回答

4

無限滾動描述了一種技術,其中頁面不包含內容。一些JavaScript代碼在瀏覽器中運行,向服務器發送請求以獲取更多內容並將其添加到頁面中。當您滾動到可用內容的末尾時,JavaScript代碼會重複該過程:它會發送另一個請求並添加其他內容。

因此,您需要帶有JavaScript引擎的Web瀏覽器,該引擎可以運行JavaScript代碼並生成導致代碼加載內容的事件。

+0

有什麼辦法在java應用程序內觸發這個javascript? – cscan

+0

你可以看看Selenium Webdriver。有一個Java API以編程方式控制瀏覽器。否則,您將需要實際實現一個將正確解釋/執行Javascript代碼的整個運行時。 – dsh

0

@dsh是正確的,內容很可能通過AJAX加載動態。作爲使用真實瀏覽器(即selenium webdriver)的替代方法,您可以查看網絡流量並確定頁面觸發的API調用。你也可以直接用Jsoup調用這個Api。然而,內容通常不是HTML,而是JSON,XML或其他格式。這樣做仍然可能是非常值得的,因爲使用webdriver通常非常緩慢且資源很大。