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

Android中使用Jsoup提取亚马逊商品页img标签alt文本的问题

解决亚马逊商品页img标签alt文本提取问题

问题分析

你当前代码失效的核心原因是Jsoup默认请求亚马逊桌面端页面,但你提供的是移动端页面HTML片段,两者DOM结构差异大;同时原选择器#image-block img范围过宽,易匹配非目标元素。

修复方案

1. 模拟移动端请求头

亚马逊会根据User-Agent返回对应版本页面,添加移动端UA让Jsoup获取和你提供的结构一致的页面:

// 移动端User-Agent示例,可按需更换
String mobileUA = "Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36";

Document doc = Jsoup.connect(url)
                .userAgent(mobileUA)
                .get();

2. 使用精准选择器

根据你提供的HTML片段,目标img有明确的id="main-image",直接用该选择器定位更可靠:

Element targetImg = doc.select("#main-image").first();
if (targetImg != null) {
    purchaseItem = targetImg.attr("alt");
} else {
    // 处理元素未找到的情况,比如提示用户或记录日志
    purchaseItem = "无法获取商品名称";
}

完整可运行代码

try {
    String mobileUA = "Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36";
    Document doc = Jsoup.connect(url)
                    .userAgent(mobileUA)
                    .timeout(10000) // 设置超时时间,避免请求卡住
                    .get();
                    
    Element targetImg = doc.select("#main-image").first();
    if (targetImg != null) {
        purchaseItem = targetImg.attr("alt");
    } else {
        // 备选方案:若main-image找不到,尝试从image-block下筛选带alt的img
        targetImg = doc.select("#image-block img[alt]").first();
        purchaseItem = targetImg != null ? targetImg.attr("alt") : "无法获取商品名称";
    }
} catch (IOException e) {
    e.printStackTrace();
    purchaseItem = "网络请求失败";
}

额外提示

  • 亚马逊页面结构可能随时调整,若后续选择器失效,需重新分析DOM结构更新定位规则;
  • 避免频繁请求亚马逊服务器,防止IP被封禁;
  • 务必捕获网络异常,避免应用崩溃。

内容的提问来源于stack exchange,提问作者Rishi Raj Dixit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:39:40