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

使用Python的Beautiful Soup无法获取亚马逊商品价格的问题

解决亚马逊商品价格爬取时遇到的reCAPTCHA问题

你碰到的确实是亚马逊的reCAPTCHA反爬机制在起作用——当亚马逊检测到请求不像正常浏览器发出的,哪怕你加了请求头,也会返回验证页面。这时候你爬取到的内容根本不是商品详情页,自然找不到a-price-whole标签,输出的6位数字大概率是验证页面里的无关内容。

给你几个可行的解决方向:

  • 补全请求头信息:只加User-Agent和Accept-Language还不够,多添加几个浏览器常用的头信息,模拟更真实的请求。比如:
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Referer": "https://www.amazon.in/",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive"
}

别用environ.get()获取UA,除非你能确定环境变量里的UA是最新有效的,直接写一个当前可用的UA更靠谱。

  • 控制请求频率:短时间内多次请求会触发亚马逊的反爬,在每次请求之间加个延迟,比如用time.sleep(2)让请求间隔2秒。

  • 用会话保持请求连贯性:用requests.Session()维持会话,模拟浏览器的Cookie持久化,让请求看起来更像正常用户操作:

import time
session = requests.Session()
session.headers.update(headers)
time.sleep(2)
response = session.get(amazon_link_address)
  • 先确认返回的页面内容:在解析前先打印response.text[:500],看看返回的是商品页面还是验证页面。如果是验证页面,就得调整反爬规避策略。

  • 修正代码里的错误:你现在代码里soup = BeautifulSoup(response.content, features="lxml").prettify()这步错了——prettify()会把BeautifulSoup对象转成字符串,之后调用find()是在字符串上操作,肯定找不到标签。得去掉.prettify(),而且a-price-whole是span标签,最好明确指定:

soup = BeautifulSoup(response.content, features="lxml")
price_element = soup.find("span", class_="a-price-whole")
print(price_element.text.strip() if price_element else "没找到价格标签")

内容的提问来源于stack exchange,提问作者JR. JOE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:05:23