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.
相关产品推荐
相关产品推荐

