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

亚马逊价格爬虫仅支持意大站点,德荷站点请求异常求助

问题原因及解决方案

核心原因

  • 亚马逊不同站点反爬策略强度差异:德国、荷兰亚马逊的反爬机制更严格,能识别出requests发起的非浏览器请求,返回反爬页面(而非正常商品页),导致目标元素无法匹配。
  • 请求头缺失关键字段:当前仅设置了User-Agent,缺少Accept-Language、Accept等浏览器标准请求头,德、荷站点对请求头完整性校验更严格,直接判定请求不合法。
  • 动态内容渲染限制:部分站点的价格元素由JavaScript动态生成,requests只能获取静态HTML源码,无法获取JS渲染后的完整内容,而开发者工具显示的是渲染完成的页面。

解决方案

1. 补全请求头

根据目标站点的语言习惯,补充完整符合浏览器标准的请求头。以德国亚马逊为例:

import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
    "Accept-Language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Referer": "https://www.amazon.de/",
    "Upgrade-Insecure-Requests": "1"
}

url = "<<your_amazon_de_url>>"
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
target = soup.find('span', {'class':'a-price-whole'})

注意:荷兰站需将Accept-Language改为nl-NL,nl;q=0.9,也可直接从浏览器开发者工具的请求头中复制完整字段。

2. 模拟浏览器渲染动态内容

如果价格是JS动态加载的,使用Selenium模拟真实浏览器行为,获取渲染后的页面源码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

# 配置无头模式(后台运行)
options = Options()
options.add_argument("--headless=new")
options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36")
options.add_argument("accept-language=de-DE,de;q=0.9")

driver = webdriver.Chrome(options=options)
driver.get(url)
# 等待元素加载(可选,根据页面响应速度调整)
driver.implicitly_wait(5)
soup = BeautifulSoup(driver.page_source, 'html.parser')
target = soup.find('span', {'class':'a-price-whole'})
driver.quit()

3. 添加Cookie模拟已访问状态

手动访问目标亚马逊站点,在浏览器开发者工具中复制Cookie字段,添加到请求头中,提升请求合法性:

headers["Cookie"] = "<<your_cookie_from_browser>>"

注意:Cookie会过期,需要定期更新。

4. 控制请求频率

添加随机延迟,避免短时间内多次触发反爬机制:

import time
import random

# 请求前随机延迟1-3秒
time.sleep(random.uniform(1, 3))
response = requests.get(url, headers=headers)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:33:33