1. 程式人生 > 其它 >Jsoup配合使用htmlunit爬取動態頁面

Jsoup配合使用htmlunit爬取動態頁面

技術標籤:爬蟲java

今天使用jsoup在做爬蟲的功能的時候,發現jsoup只能爬取靜態頁面,對於ajax和json動態生成的頁面的支援並不友好。

於是我嘗試直接用請求傳送param和資料頭,希望能直接返回json資料,但可能是由於網站介面不支援沒能成功。

在嘗試其他方法之後,從網上發現可以使用htmlunit模擬瀏覽器,生成動態的網頁之後,再用jsoup對生成的動態網頁進行解析

以下是pom.xml maven依賴程式碼

    <dependencies>
        <!--jsoup-->
        <dependency>
            <
groupId
>
org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.11.3</version> </dependency> <!--htmlunit--> <dependency> <groupId>net.sourceforge.htmlunit</groupId> <
artifactId
>
htmlunit</artifactId> <version>2.33</version> </dependency> </dependencies>

下面是java程式碼

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element; import java.io.IOException; public class JsoupTest { public static void main(String[] args) { queryDocument("北斗"); } public static void queryDocument(String documentName){ WebClient browser = new WebClient(); browser.getOptions().setCssEnabled(false); browser.getOptions().setJavaScriptEnabled(true); browser.getOptions().setThrowExceptionOnScriptError(false); String url = "http://oar.nstl.gov.cn/Paper/Search?searchKey="+documentName+"&x=0&y=0"; try { HtmlPage htmlPage = browser.getPage(url); browser.waitForBackgroundJavaScript(3000); Document document = Jsoup.parse(htmlPage.asXml()); Element paper = document.getElementById("paper"); System.out.println(paper); } catch (IOException e) { e.printStackTrace(); } } }