You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用HtmlUnit/jSoup抓取网页时遇页面内容不一致问题

Qwant网页抓取仅获基础页面?问题拆解与解决方案

嘿,我来帮你搞定这个问题!你碰到的情况百分百和JavaScript有关,而且大概率是HtmlUnit的配置或者等待逻辑没跟上Qwant的动态渲染节奏。

为什么会出现内容差异?

  • 动态渲染是核心原因:Qwant这类现代搜索引擎的搜索结果,都是先加载一个基础页面框架,实际的搜索结果、链接这些内容,全是靠JavaScript异步调用后端接口获取后,再动态插入到页面里的。Jsoup本身不支持执行JS,自然拿不到动态内容;而你用的HtmlUnit虽然支持JS,但可能踩了两个坑:
    • 你用的FIREFOX_52是比较旧的浏览器版本模拟,对Qwant用的现代JS语法支持有限,导致部分JS代码执行失败,内容没法正常渲染。
    • 虽然加了waitForBackgroundJavaScript(25000),但这个方法只是等待当前正在运行的JS任务结束,没法覆盖后续触发的AJAX请求,可能结果还没加载完就已经获取页面内容了。

调整代码抓取完整内容

我给你改了代码,优化了配置和等待逻辑,应该能拿到完整的搜索结果和URL:

WebClient webClient = new WebClient(BrowserVersion.CHROME);
try {
    // 优化配置:禁用CSS减少渲染负担,启用JS,关闭弹窗拦截
    webClient.getOptions().setCssEnabled(false);
    webClient.getOptions().setJavaScriptEnabled(true);
    webClient.getOptions().setPopupBlockerEnabled(false);
    webClient.getOptions().setTimeout(30000); // 设置30秒超时

    HtmlPage page = webClient.getPage("https://www.qwant.com/?q=cat&t=web");
    
    // 轮询检查搜索结果是否加载完成(比单纯等待JS更可靠)
    int waitElapsed = 0;
    final int MAX_WAIT = 30000;
    while (waitElapsed < MAX_WAIT) {
        // 用Qwant的结果链接选择器检查(实际DOM结构可能微调,可根据浏览器F12确认)
        DomNodeList<DomElement> resultUrls = page.querySelectorAll(".result__url");
        if (resultUrls.size() > 0) {
            break; // 找到结果就停止等待
        }
        Thread.sleep(1000);
        waitElapsed += 1000;
        // 更新页面实例,确保获取最新的渲染结果
        page = (HtmlPage) webClient.getCurrentWindow().getEnclosedPage();
    }

    // 提取所有搜索结果URL
    DomNodeList<DomElement> urlElements = page.querySelectorAll(".result__url");
    for (DomElement elem : urlElements) {
        String targetUrl = elem.getAttribute("href");
        System.out.println("抓取到的URL:" + targetUrl);
    }
} finally {
    webClient.close(); // 记得关闭客户端释放资源
}
  • 关键调整点:用CHROME浏览器版本模拟,对现代JS兼容性更好;通过轮询检查目标元素是否出现,确保内容真的加载完成;直接用CSS选择器提取URL,比解析整个HTML字符串高效得多。

额外建议

如果HtmlUnit还是搞不定,可以试试Selenium配合无头Chrome/Firefox,它的JS渲染能力和真实浏览器几乎一致,能完美处理这类动态页面。另外,注意不要频繁请求Qwant,避免触发反爬机制,建议每次请求间隔1-2秒。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:47:23