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

使用requests和BeautifulSoup应对页面更新后的URL变化问题

解决URL更新导致的旧数据解析问题

嘿,这个问题我之前帮朋友处理过!像亚马逊这类平台,商品链接经常会因为商品迭代、合并或者系统规范化更新URL,导致旧链接要么跳转到新页面,要么返回滞后的数据。针对你的场景,这里有几个实用的解决方案:

方案1:让Requests自动跟随重定向,提取最终有效URL

Requests库默认是允许自动跟随重定向的(allow_redirects=True),所以你请求旧URL后,只需要读取response.url就能拿到跳转后的最新URL,还能顺便把这个新URL更新回你的Excel表格,避免下次再踩坑。

示例代码:

import requests

# 模拟Excel里的旧URL
old_url = "https://www.amazon.com/dp/B07BHF8PPB"
# 记得加请求头,避免被亚马逊反爬拦截
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'
}

response = requests.get(old_url, headers=headers)
# 检查是否发生了重定向
if response.history:
    print(f"旧URL已自动跳转到: {response.url}")
    # 这里写代码把response.url更新回你的Excel表格里对应的行
final_url = response.url

# 接下来用final_url去解析页面就可以拿到最新数据了
# soup = BeautifulSoup(response.text, 'html.parser')

这个方法的好处是简单直接,完全利用Requests的原生能力,还能同步更新你的URL数据源,一劳永逸。

方案2:提取商品唯一标识符(ASIN),构造标准链接

亚马逊商品的核心标识是ASIN(就是/dp/后面的那段字符串),这个标识符几乎不会变动,比URL可靠得多。你可以从旧URL或重定向后的最终URL里提取ASIN,然后用它构造标准的商品链接,不管URL怎么更新,这个链接都能指向正确的页面。

示例代码:

import requests
from urllib.parse import urlparse

def extract_asin(url):
    parsed_url = urlparse(url)
    path_segments = parsed_url.path.split('/')
    # 从路径里找/dp/后面的ASIN
    if 'dp' in path_segments:
        dp_index = path_segments.index('dp')
        if dp_index + 1 < len(path_segments):
            return path_segments[dp_index + 1]
    return None

# 从旧URL提取ASIN
old_url = "https://www.amazon.com/dp/B07BHF8PPB"
old_asin = extract_asin(old_url)

# 请求旧URL拿到最终页面,再提取最新的ASIN(如果有的话)
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'
}
response = requests.get(old_url, headers=headers)
final_asin = extract_asin(response.url)

# 用最终ASIN构造标准链接
standard_url = f"https://www.amazon.com/dp/{final_asin}"

建议你以后把ASIN存在Excel里,而不是完整URL——毕竟ASIN是商品的唯一身份标识,比随时可能变动的URL稳定太多。

额外提醒:反爬注意事项

亚马逊对爬虫限制很严,直接用Requests请求很容易被拦截(返回验证码页面或503错误)。除了加User-Agent,还可以考虑:

  • 加入随机请求间隔
  • 代理IP轮换(如果请求量很大)
  • 使用requests.Session()维持会话

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:11:01