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

使用bs4的find方法爬取亚马逊页面返回None该如何排查?

问题原因

你的代码返回None的核心原因是亚马逊的反爬虫机制拦截了无标识的请求:

  • 默认情况下requests库发起的请求会携带默认的User-Agent标识(值类似python-requests/2.28.0),亚马逊识别到该标识属于爬虫请求后,不会返回正常的商品详情页,而是返回验证页或者错误页,返回的页面源码中不存在id="productTitle"的元素,因此find方法返回None。
  • 少数情况下也可能是解析器匹配效率的问题,你也可以将html.parser替换为lxml提升解析兼容性(需要先安装lxml库:pip install lxml)。
修复方案

给请求添加模拟浏览器的请求头即可解决大部分拦截问题,修改后的代码如下:

from bs4 import BeautifulSoup
import requests

url = "https://www.amazon.fr/HyperX-Cloud-Sans-fil-interrupteur/dp/B08NTYB4M7/ref=sr_1_2?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=3O51QACXTGCAX&dchild=1&keywords=hyperx+cloud+2+wireless&qid=1630444291&sprefix=hyperx+cloud+2+w%2Caps%2C203&sr=8-2"
# User-Agent可替换为你自己浏览器实际的UA,打开浏览器F12控制台的网络选项卡即可查看
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Accept-Language": "fr-FR,fr;q=0.9"
}

# 请求时携带headers参数
page = requests.get(url, headers=headers)
# 可选:打印状态码确认请求是否正常,200代表请求成功
print(f"请求状态码:{page.status_code}")

soup = BeautifulSoup(page.content, "html.parser")
title_ele = soup.find(id="productTitle")
if title_ele:
    print(f"商品标题:{title_ele.get_text().strip()}")
else:
    # 调试用:打印返回的页面前1000字符,确认是否被拦截
    print(page.text[:1000])
额外注意事项
  • 如果添加请求头后仍返回None,说明触发了更严格的反爬验证,可尝试降低请求频率、添加代理IP,或使用Selenium、Playwright等模拟真实浏览器操作的工具发起请求。
  • 亚马逊页面结构会不定期更新,定位元素时可结合class属性、父节点层级等多种方式提升定位稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:45:03