Jsoup配合使用htmlunit爬取动态页面

今天使用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();
		}
	}
}


  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jsoup是一个用于处理HTML文档的Java库,它可以轻松地从HTML文档中提取数据。但是,如果你需要爬取动态页面使用Jsoup就会遇到一些问题,因为Jsoup只能获取静态HTML页面,无法处理动态页面。 对于动态页面,你需要使用其他工具,如Selenium WebDriver。Selenium WebDriver是一个自动化测试工具,可以模拟用户在浏览器中的操作,包括点击按钮、输入文本、滚动页面等。通过使用Selenium WebDriver,你可以模拟用户操作来获取动态页面。 以下是使用Selenium WebDriver和Jsoup爬取动态页面的步骤: 1. 使用Selenium WebDriver打开网页,并模拟用户操作获取动态页面。 2. 使用Jsoup解析获取到的HTML文档,提取所需数据。 下面是一个示例代码,演示如何使用Selenium WebDriver和Jsoup爬取动态页面: ``` // 导入相关的包 import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class DynamicPageScraper { public static void main(String[] args) { // 设置ChromeDriver路径 System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver"); // 创建ChromeDriver实例 WebDriver driver = new ChromeDriver(); // 打开网页 driver.get("https://example.com"); // 模拟用户操作,例如点击按钮,输入文本等 WebElement button = driver.findElement(By.id("button")); button.click(); // 获取动态页面HTML文档 String html = driver.getPageSource(); // 使用Jsoup解析HTML文档,提取所需数据 Document doc = Jsoup.parse(html); // TODO: 提取数据的代码 // 关闭ChromeDriver driver.quit(); } } ``` 在上面的示例代码中,我们使用了ChromeDriver打开网页,并模拟了用户操作来获取动态页面。然后,我们使用Jsoup解析HTML文档,提取所需数据。最后,我们关闭ChromeDriver。 需要注意的是,我们需要下载ChromeDriver并设置其路径。另外,我们还需要导入相关的包。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值