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

使用JSoup爬取亚马逊评论遇503错误,求助提取评论者影响力值

解决JSoup爬取亚马逊评论时的HTTP 503错误问题

HTTP 503错误是亚马逊反爬机制触发导致的——Jsoup默认请求头会被识别为非浏览器请求,直接被拦截。以下是具体解决方法和优化后的代码:

核心修复点

  • 添加浏览器请求头:模拟真实浏览器的请求标识,避免被判定为爬虫
  • 增加请求间隔:降低请求频率,减少触发反爬的概率
  • 完善错误处理:单个页面请求失败时不中断整个爬取流程

优化后的代码

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;

public class AmazonReviewScraper {

    public static void main(String[] args) {
        HashMap<String, String> reviewers = new HashMap<>();
        // 模拟Chrome浏览器的User-Agent
        String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
        
        try {
            // 请求商品评论页面,添加浏览器请求头
            Document reviewPage = Jsoup.connect("https://www.amazon.co.uk/Charles-Dickens-Complete-Christmas-Collection/dp/B08FRBWTNX/ref=sr_1_1_sspa?crid=USM5FCL8WJZ4&keywords=charles+dickens&qid=1678359627&sprefix=charles+dickens%2Caps%2C127&sr=8-1-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1")
                    .userAgent(userAgent)
                    .header("Accept-Language", "en-US,en;q=0.9")
                    .get();
            
            Elements reviewPageElements = reviewPage.select(".review");
            
            for (Element reviewPageElement : reviewPageElements) {
                // 提取评论者姓名
                Element nameElement = reviewPageElement.selectFirst(".a-profile-name");
                if (nameElement == null) continue;
                String name = nameElement.text();
                
                // 提取个人主页链接
                Element linkElement = reviewPageElement.selectFirst(".a-profile");
                if (linkElement == null) continue;
                String link = linkElement.attr("href");
                String profileUrl = "https://www.amazon.co.uk" + link;
                
                // 延迟1秒,避免请求过快触发反爬
                TimeUnit.SECONDS.sleep(1);
                
                // 请求个人主页,单独捕获异常防止整个流程中断
                try {
                    Document profilePage = Jsoup.connect(profileUrl)
                            .userAgent(userAgent)
                            .header("Accept-Language", "en-US,en;q=0.9")
                            .get();
                    
                    Elements impactElement = profilePage.select(".impact-text");
                    String impact = impactElement.text().isEmpty() ? "无影响力数据" : impactElement.text();
                    
                    reviewers.put(name, impact);
                    System.out.println("已获取:" + name + " - " + impact);
                } catch (IOException e) {
                    System.err.println("获取" + name + "的个人主页失败:" + e.getMessage());
                    reviewers.put(name, "获取失败");
                }
            }
            
            // 输出最终结果
            System.out.println("\n最终爬取结果:");
            reviewers.forEach((k, v) -> System.out.println(k + ": " + v));
            
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

额外注意事项

  • 不要过度缩短请求间隔,否则可能会被亚马逊封禁IP
  • 亚马逊页面结构可能随时变化,需定期检查选择器有效性
  • 遵守亚马逊robots.txt规则,避免爬取禁止访问的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:32:50