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

如何仅用Requests库爬取StockX站点AJAX异步加载的完整页面内容

核心原因

你用Requests请求拿到的只是服务端返回的静态HTML代码,Requests本身不支持执行JavaScript,所以哪怕你加了sleep等待也无法触发AJAX请求加载后续内容,这和浏览器加载页面的逻辑完全不同。

纯Requests实现方案

1. 直接调用站点内部AJAX接口

  • 打开浏览器的F12开发者工具,切换到「网络」标签,筛选「Fetch/XHR」分类后刷新目标页面,找到返回你所需动态内容的接口,StockX的商品数据大多由api.stockx.com域名下的接口返回,返回格式为结构化JSON,比解析HTML更高效。
  • 复制该接口的完整请求头、查询参数、有效Cookie,直接用Requests发起请求即可拿到全量数据。

2. 提取页面内嵌的初始数据

StockX会把基础商品数据预先注入到静态HTML的<script>标签中,你可以通过正则匹配提取这段JSON数据,无需额外调用接口:

import requests
import re
import json
from bs4 import BeautifulSoup

session = requests.Session()
# 补齐所有浏览器请求该页面时带的请求头,不要只传User-Agent
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0',
    'Accept-Language': 'en-US,en;q=0.5',
    'Referer': 'https://stockx.com/',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
}
# 补齐浏览器中获取的有效Cookie,尤其是stockx_session字段
cookies = {
    'stockx_homepage': "sneakers",
}

mainURL = "https://stockx.com/adidas-crazy-byw-x-2-ubiq"
resp = session.get(mainURL, headers=headers, cookies=cookies)
# 匹配页面内嵌的全局数据变量
data_pattern = re.compile(r'window.__INITIAL_STATE__ = (.*?);', re.S)
match_res = data_pattern.findall(resp.text)
if match_res:
    product_data = json.loads(match_res[0])['product']
    # 直接从结构化数据中取所需字段即可
    print(product_data)

注意事项

  • StockX反爬机制较严,请求时必须把x-api-key、stockx_session这类校验字段补充完整,否则会被拦截。x-api-key可以从浏览器请求头中复制,也可以从页面加载的JS文件中提取,有效期较长。
  • 控制请求频率,单次请求间隔不低于3秒,IP被限制时可搭配代理IP池使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:45:05