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

Python BeautifulSoup仅爬取亚马逊评论首页,求无代理爬全方案

解决亚马逊评论爬取仅能获取首页内容的问题

你的问题大概率是亚马逊反爬机制拦截了换页请求,Colab的共享IP池很可能已经被亚马逊标记为爬虫IP,导致后续页面请求被拒绝。

关于代理的必要性

是的,必须使用代理,而且优先选择住宅代理(Residential Proxy)而非数据中心代理。住宅代理的IP来自真实用户设备,更难被亚马逊的反爬系统识别。建议使用支持IP自动轮换的代理池,每次请求切换不同IP,降低被封禁的概率。

其他反爬优化措施

除了代理,还需要配合以下操作模拟真实用户行为:

  • 完善请求头:使用真实浏览器的User-Agent、Accept-Language、Referer等字段,避免使用requests库的默认请求头。
  • 控制请求频率:每次请求后添加2-5秒的随机延迟,避免短时间内发送大量请求。
  • 使用会话保持:用requests.Session()维持会话cookie,模拟用户连续浏览的状态,比单次请求更贴近真实访问。
  • 异常检测:在代码中检查响应状态码(比如403、503),或者判断页面是否包含验证码、错误提示,一旦触发异常就暂停请求或更换IP。

示例代码片段

import requests
from bs4 import BeautifulSoup
import time
import random

# 替换为你的代理池
proxy_pool = [
    "http://your-proxy-1:port",
    "http://your-proxy-2:port",
    # 更多代理...
]

# 模拟真实浏览器请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Referer": "https://www.amazon.com/"
}

session = requests.Session()
session.headers.update(headers)

def scrape_reviews(page_url):
    # 随机选择代理
    proxy = random.choice(proxy_pool)
    proxies = {"http": proxy, "https": proxy}
    
    try:
        resp = session.get(page_url, proxies=proxies, timeout=12)
        resp.raise_for_status()
        soup = BeautifulSoup(resp.text, "html.parser")
        
        # 提取评论(注意:亚马逊页面结构可能变化,需自行更新选择器)
        review_items = soup.find_all("div", class_="a-section review aok-relative")
        return [item.find("span", class_="a-size-base review-text review-text-content").get_text(strip=True) for item in review_items]
    except Exception as e:
        print(f"页面{page_url}爬取失败: {str(e)}")
        return []

# 替换为目标商品的评论页基础URL(ASIN替换为实际商品ID)
base_review_url = "https://www.amazon.com/product-reviews/XXX-ASIN-XXX/ref=cm_cr_getr_d_paging_btm_next_{}?pageNumber={}"

all_reviews = []
for page_num in range(1, 15):  # 爬取前15页示例
    current_url = base_review_url.format(page_num+1, page_num)
    page_reviews = scrape_reviews(current_url)
    
    if not page_reviews:
        print(f"第{page_num}页无有效评论,可能被拦截")
        break
    
    all_reviews.extend(page_reviews)
    time.sleep(random.uniform(2.5, 6))  # 随机延迟

print(f"总共爬取到{len(all_reviews)}条评论")

注意事项

  • 亚马逊的页面HTML结构会不定期更新,需要定期检查并调整BeautifulSoup的选择器。
  • 爬取亚马逊数据需严格遵守其《服务条款》和robots.txt规则,避免触发法律风险。

内容的提问来源于stack exchange,提问作者Alfredo N.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:47:48