要爬取動(dòng)態(tài)網(wǎng)頁(yè),你需要使用一個(gè)支持JavaScript渲染的庫(kù)。在Java中,常用的庫(kù)有HtmlUnit、Selenium和Jsoup。這里以HtmlUnit為例,介紹如何爬取動(dòng)態(tài)網(wǎng)頁(yè)。
Maven:
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.56.0</version>
</dependency>
Gradle:
implementation 'net.sourceforge.htmlunit:htmlunit:2.56.0'
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class DynamicWebScraper {
public static void main(String[] args) throws IOException {
// 創(chuàng)建WebClient對(duì)象
WebClient webClient = new WebClient();
// 啟用JavaScript支持
webClient.getOptions().setJavaScriptEnabled(true);
// 設(shè)置超時(shí)時(shí)間(可選)
webClient.getOptions().setJavaScriptTimeout(10000);
// 獲取網(wǎng)頁(yè)
HtmlPage page = webClient.getPage("https://example.com/dynamic-page");
// 等待頁(yè)面加載完成(可選)
webClient.waitForBackgroundJavaScript(10000);
// 獲取渲染后的HTML內(nèi)容
String htmlContent = page.asXml();
// 關(guān)閉WebClient
webClient.close();
// 將HTML內(nèi)容寫入文件
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.html"))) {
writer.write(htmlContent);
}
System.out.println("動(dòng)態(tài)網(wǎng)頁(yè)已成功抓取并保存到output.html文件中");
}
}
這個(gè)示例將會(huì)訪問(wèn)指定的URL(請(qǐng)?zhí)鎿Q為實(shí)際的動(dòng)態(tài)網(wǎng)頁(yè)URL),執(zhí)行JavaScript代碼,等待頁(yè)面加載完成,然后將渲染后的HTML內(nèi)容保存到名為"output.html"的文件中。
注意:HtmlUnit可能無(wú)法完美地模擬所有瀏覽器的行為,因此在某些情況下,你可能需要使用Selenium。