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

不同URL返回相同响应:如何获取与浏览器一致的请求结果?

问题原因与解决方案

出现相同响应的原因

  • 前端动态渲染机制:亚马逊黑五页面的商品列表是通过前端JavaScript动态加载的,你通过requests请求的只是页面的基础HTML框架,实际的分页数据(不同viewIndex对应的内容)是浏览器加载页面后,再通过AJAX请求从后端接口获取的。因此不管viewIndex是0还是60,初始GET请求返回的基础HTML都是一致的。
  • 请求头不完整:浏览器发送请求时会携带多个关键请求头(如User-Agent、Accept系列头、Referer等),你的requests代码仅提供了Cookie,缺失这些头会导致亚马逊服务器无法识别为合法浏览器请求,返回统一的基础页面内容。
  • Cookie有效性问题:你使用的Cookie可能已过期,或缺少部分会话标识信息,导致服务器无法根据viewIndex参数返回对应分页的内容。

解决办法

1. 补充完整请求头,模拟浏览器请求

将浏览器中实际发送的请求头(可通过F12开发者工具的Network标签查看)添加到requests的headers中,示例代码如下:

import requests

url = "https://www.amazon.it/blackfriday"
querystring = {
    "ref_": "nav_cs_gb_td_bf_dt_cr",
    "deals-widget": "{\"version\":1,\"viewIndex\":60,\"presetId\":\"deals-collection-all-deals\",\"sorting\":\"BY_SCORE\"}"
}

# 从浏览器复制完整的请求头替换此处内容
headers = {
    "cookie": "session-id=260-4643637-2647537; session-id-time=2082787201l; i18n-prefs=EUR; ubid-acbit=258-7747562-7485655; session-token=%22aZB70z2dnXHbhJ9e02ESp7q6xO23IGnDFT2iBCiPXZFoBTTEguAJ%2FBSnV7ud6bjAca64nh3bMF1bwDykOBf9BV%2BVjbx4tUQCyBkrg8tyR8PLZ8cjzpCz%2FzQSAmjiL6mSBcspkF8xuV0bxqLeRX7JQCMrHVBFf%2BsUhxV%2FMBLCH8UPk2o5aNL7OyAFCODBdRqm72RK5DAoKeMUymlVEOtqzvZSJbP%2Fut0gobiXJblRM2c%3D%22",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "Accept-Language": "it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7",
    "Accept-Encoding": "gzip, deflate, br",
    "Referer": "https://www.amazon.it/",
    "Upgrade-Insecure-Requests": "1"
}

response = requests.get(url, headers=headers, params=querystring)
# 检查响应内容是否包含对应分页的商品数据
print(response.text)

2. 直接抓取动态加载的API接口

通过浏览器开发者工具(F12 → Network → XHR/Fetch),找到页面加载分页数据时调用的后端API接口,直接请求该接口获取对应viewIndex的商品数据(通常为JSON格式)。步骤如下:

  • 打开目标页面,切换到开发者工具的Network标签
  • 切换分页(或刷新页面),找到带有deals-widget或分页参数的XHR请求
  • 复制该请求的URL、请求头和参数,用requests直接请求

3. 使用浏览器自动化工具(Selenium/Playwright)

如果亚马逊反爬机制严格,直接模拟请求头或API接口无法获取数据,可使用Selenium或Playwright完全模拟浏览器行为,执行JavaScript并加载动态内容。示例(Playwright):

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动浏览器,headless=False可看到浏览器窗口
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    # 访问目标URL
    target_url = "https://www.amazon.it/blackfriday?ref_=nav_cs_gb_td_bf_dt_cr&deals-widget=%257B%2522version%2522%253A1%252C%2522viewIndex%2522%253A60%252C%2522presetId%2522%253A%2522deals-collection-all-deals%2522%252C%2522sorting%2522%253A%2522BY_SCORE%2522%257D"
    page.goto(target_url, wait_until="networkidle")
    # 获取页面完整内容(包含动态加载的商品)
    page_content = page.content()
    print(page_content)
    browser.close()

注意事项

  • 亚马逊反爬机制严格,频繁请求可能导致IP或账号被封禁,建议添加请求间隔、使用代理IP,避免过度请求。
  • Cookie具有时效性,需定期从浏览器中更新Cookie内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:46:10