使用Beautiful Soup爬取亚马逊页面无法获取完整HTML的问题
解决亚马逊页面爬取返回错误页的问题
嘿,我太懂你这种情况了——用requests爬其他网站都正常,一碰亚马逊就返回“Something went wrong”的错误页,这完全是亚马逊的反爬机制在搞鬼,它把你的请求当成机器人了。下面给你几个实用的解决办法:
1. 加上模拟浏览器的请求头(最关键)
默认情况下,requests发送的请求会带着暴露身份的User-Agent(比如python-requests/xx.x.x),亚马逊一眼就能识别出来。你需要把请求头改成真实浏览器的User-Agent:
import requests from bs4 import BeautifulSoup # 替换成你自己浏览器的User-Agent,下面这个是示例 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' } # 带请求头发送请求 page = requests.get( "https://www.amazon.com/Python-Crash-Course-2nd-Edition/dp/1593279280/", headers=headers ) soup = BeautifulSoup(page.content, 'html.parser') print(soup.title)
怎么找自己的User-Agent?打开浏览器按F12,切换到「Network」标签,刷新页面后随便点一个请求,在「Request Headers」里找到User-Agent字段,复制下来就行。
2. 补充Cookie(可选但能提升成功率)
有时候亚马逊会验证会话Cookie,你可以手动在浏览器打开亚马逊商品页,复制Cookie信息加到请求头里:
headers = { 'User-Agent': '你的浏览器User-Agent', 'Cookie': '这里粘贴从浏览器复制的Cookie字符串' }
注意:Cookie有过期时间,过段时间需要重新复制新的。
3. 控制请求频率,别爬太猛
如果短时间内连续发送请求,亚马逊会直接封禁你的IP。爬取时记得加个延迟:
import time # 每爬一个页面后暂停2秒 time.sleep(2)
做完这些调整后,你应该就能拿到亚马逊商品页的完整HTML了,soup.title也会显示正确的商品标题,而不是错误页的“Sorry! Something went wrong!”。
内容的提问来源于stack exchange,提问作者Lacer
相关产品推荐
相关产品推荐

