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

Java使用Jsoup解析HTML问题:ASOS网站产品价格提取失败求助

解决Jsoup爬ASOS产品价格缺失的问题

我完全懂你的困扰——同样的爬虫逻辑对Amazon好使,到ASOS这里就拿不到产品价格,甚至设置了userAgent()也没改善,还不想依赖外部工具。问题的核心其实是ASOS的页面内容是通过JavaScript动态渲染的,而Jsoup只能抓取服务器返回的静态HTML,根本看不到JS执行后生成的价格数据。

下面给你纯Java的解决方案,不用任何外部应用:

方案:使用HtmlUnit(纯Java无头浏览器)

HtmlUnit是纯Java实现的无头浏览器,它能模拟浏览器执行JavaScript,获取到和浏览器完全一致的渲染后HTML,完美解决动态页面的爬取问题。

步骤1:添加依赖

如果用Maven,在pom.xml中添加:

<dependency>
    <groupId>net.sourceforge.htmlunit</groupId>
    <artifactId>htmlunit</artifactId>
    <version>2.70.0</version> <!-- 建议使用最新稳定版 -->
</dependency>

如果是Gradle,添加到build.gradle:

implementation 'net.sourceforge.htmlunit:htmlunit:2.70.0'

步骤2:编写爬取代码

这里是获取ASOS产品价格的示例代码:

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class AsosPriceScraper {
    public static void main(String[] args) throws Exception {
        // 初始化WebClient,启用JS执行
        try (WebClient webClient = new WebClient()) {
            // 配置参数,模拟真实浏览器行为
            webClient.getOptions().setJavaScriptEnabled(true);
            webClient.getOptions().setCssEnabled(false); // 禁用CSS渲染,提升速度
            webClient.getOptions().setThrowExceptionOnScriptError(false); // 忽略JS错误,避免爬取中断
            webClient.getOptions().setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36");

            // 加载目标产品页面
            HtmlPage page = webClient.getPage("http://www.asos.com/your-specific-product-url");
            
            // 将渲染后的页面转为Jsoup可解析的Document
            String renderedHtml = page.asXml();
            Document doc = Jsoup.parse(renderedHtml);
            
            // 解析价格(注意:需要根据ASOS当前DOM结构调整选择器)
            String productPrice = doc.select(".product-price--current").text(); // 示例选择器,实际需查看页面元素
            System.out.println("产品价格:" + productPrice);
        }
    }
}

关键说明

  • HtmlUnit会完整执行页面的JavaScript,所以能获取到和浏览器中完全一致的HTML内容,价格自然就存在了。
  • 你需要打开ASOS产品页面,用浏览器开发者工具查看价格元素的真实选择器(比如类名、ID),替换示例中的.product-price--current。
  • 可以调整WebClient的配置,比如设置超时时间、添加请求延迟,避免触发ASOS的反爬机制。

为什么之前的Jsoup+userAgent无效?

因为ASOS服务器返回的静态HTML里根本没有价格数据,价格是页面加载后通过AJAX请求或前端JS动态生成的。Jsoup不管设置多少请求头,都只能拿到服务器返回的原始静态内容,看不到JS渲染后的结果。

内容的提问来源于stack exchange,提问作者f.net

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:49:56