使用BeautifulSoup和Requests爬取亚马逊商品链接遇503错误求助
解决亚马逊搜索页爬取返回503状态码的问题
爬取亚马逊搜索页(URL:
https://www.amazon.com/s?k=mercedes&crid=37ZCGOIJ0A8V4&sprefix=me%2Caps%2C1587&ref=nb_sb_noss_2)时返回503状态码,但访问亚马逊首页能正常返回200,已填写正确的User-Agent,代码如下:import requests from bs4 import BeautifulSoup import pandas as pd URL = "https://www.amazon.com/s?k=mercedes&crid=37ZCGOIJ0A8V4&sprefix=me%2Caps%2C1587&ref=nb_sb_noss_2" HEADER = ({'User-Agent':'', 'Accept-Language': 'en-US, en;q=0.5'}) r = requests.get(URL, headers=HEADER) soup = BeautifulSoup(r.content, "html.parser") aTag = soup.find_all("a") print(aTag)
原因与解决方法
亚马逊搜索页的反爬机制比首页更严格,仅提供User-Agent不足以绕过检测,以下是可行的调整方案:
1. 完善请求头,模拟真实浏览器行为
补充浏览器常用的请求头字段,让请求更贴近真实用户:
HEADER = { 'User-Agent': '你的真实User-Agent', 'Accept-Language': 'en-US,en;q=0.9', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'Cache-Control': 'max-age=0' }
2. 使用会话维护请求状态
亚马逊会通过会话Cookie验证请求合法性,用requests.Session()自动维护Cookie,提升请求成功率:
import requests from bs4 import BeautifulSoup URL = "https://www.amazon.com/s?k=mercedes&crid=37ZCGOIJ0A8V4&sprefix=me%2Caps%2C1587&ref=nb_sb_noss_2" HEADER = { 'User-Agent': '你的真实User-Agent', 'Accept-Language': 'en-US,en;q=0.9', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1' } session = requests.Session() session.headers.update(HEADER) # 先访问首页获取初始会话Cookie session.get("https://www.amazon.com/") # 再请求目标搜索页 r = session.get(URL) print(r.status_code) soup = BeautifulSoup(r.content, "html.parser") aTag = soup.find_all("a") print(aTag)
3. 添加随机请求延迟
短时间内频繁请求会触发拦截,在请求间加入1-3秒的随机延迟:
import time import random # 请求前添加随机延迟 time.sleep(random.uniform(1, 3)) r = session.get(URL)
4. 轮换代理IP
如果单一IP被限制,使用代理IP分散请求来源:
proxies = { 'http': 'http://你的代理IP:端口', 'https': 'https://你的代理IP:端口' } r = session.get(URL, proxies=proxies)
5. 优先使用官方API(合规方案)
若爬取需求为商业用途或需要稳定数据,建议使用亚马逊官方API(如Product Advertising API),从根源避免反爬拦截。
内容的提问来源于stack exchange,提问作者Muhammad Safeer Hassan
相关产品推荐
相关产品推荐

