Jsoup配合使用htmlunit爬取動態頁面
阿新 • • 發佈:2021-01-26
今天使用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();
}
}
}