运行res.raise_for_status()遇503错误,如何解决?(Python爬亚马逊HTML)
解决请求亚马逊页面时的503 Server Error问题
这个503错误本质是亚马逊的反爬机制在起作用——它识别出你的请求来自Python脚本,而非正常的浏览器访问,所以直接返回了服务不可用的提示。下面给你几个可行的解决思路:
1. 模拟浏览器请求头
最直接的办法是给requests.get()添加浏览器的请求头信息,核心是设置User-Agent字段,让服务器认为你是普通浏览器用户。示例代码如下:
import bs4 import requests # 替换成你自己浏览器的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' } res = requests.get('http://www.amazon.com/gp/product/1593275994/', headers=headers) res.raise_for_status()
怎么获取自己的User-Agent?打开浏览器按F12进入开发者工具,切换到「网络」标签,刷新一个页面后选中第一个请求,在「请求头」里找到User-Agent字段,复制它的值即可。
2. 控制请求频率
不要短时间内重复发送请求,这会极大触发亚马逊的反爬检测。可以在请求之间加入延迟,比如用time.sleep():
import time # ... 其他代码 time.sleep(3) # 每次请求前或后等待3秒 res = requests.get(...)
3. 使用会话保持
用requests.Session()维持会话状态,模拟浏览器的持续访问行为,有时候能绕过一些基础的反爬检测:
import bs4 import requests headers = { 'User-Agent': '你的浏览器User-Agent' } session = requests.Session() session.headers.update(headers) res = session.get('http://www.amazon.com/gp/product/1593275994/') res.raise_for_status()
额外提示:优先使用官方API
如果你的需求是批量获取亚马逊商品数据,强烈建议使用亚马逊官方的Product Advertising API,这是合规的获取数据方式,不会被反爬机制拦截,也能避免后续可能出现的IP封禁问题。
内容的提问来源于stack exchange,提问作者Prashant Shrestha
相关产品推荐
相关产品推荐

