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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:13:12