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

Python爬虫因JavaScript导致请求结果与网页不符,无法获取产品链接

解决BC Liquor Stores产品链接爬取问题

页面依赖JavaScript渲染,但这类电商网站通常会通过后端API异步加载产品数据,而非直接在初始HTML中渲染。你之前用的requests、urllib只能拿到初始静态HTML,requests_html的渲染可能未等待API请求完成,所以找不到/product/链接。

最优方案:直接调用产品数据API

  1. 打开浏览器开发者工具(F12),切换到「Network」标签,刷新目标页面。
  2. 筛选「XHR」或「Fetch」类型的请求,查找返回产品列表的接口(通常URL包含api、product等关键词)。
  3. 复制该API的请求URL、参数和请求头,直接用requests请求即可获取结构化的产品数据,从中提取链接或拼接/product/格式的URL。

代码示例(基于常见API结构)

import requests

# 替换为你找到的实际API地址
api_url = "https://www.bcliquorstores.com/api/product-catalogue"
# 原页面的查询参数直接复用
params = {
    "categoryclass": "coolers & ciders",
    "special": "new product",
    "sort": "name.raw:asc",
    "page": 1
}
headers = {
    "Host": "www.bcliquorstores.com",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0",
    "Accept": "application/json",
    "Accept-Language": "en-US,en;q=0.7,fa;q=0.3",
    "X-Requested-With": "XMLHttpRequest"  # 多数异步API需要此请求头
}

# 发起API请求
response = requests.get(api_url, params=params, headers=headers)
product_data = response.json()

# 提取并生成产品链接(根据实际返回的字段调整,比如urlSlug、productId等)
for item in product_data.get("items", []):
    product_link = f"https://www.bcliquorstores.com/product/{item['urlSlug']}"
    print(product_link)

备选方案:优化requests_html渲染

如果暂时找不到API,可尝试延长渲染等待时间,确保API请求完成:

from requests_html import AsyncHTMLSession

asession = AsyncHTMLSession()
r = await asession.get(url, headers=headers)
# 延长等待时间,确保页面完全加载
await r.html.arender(wait=5, scrolldown=1)
# 直接提取所有产品链接元素
product_links = r.html.find("a[href*='/product/']")
for link in product_links:
    print(link.attrs['href'])

优先推荐API方案,比模拟浏览器渲染更高效、稳定,也避免了Selenium的繁琐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:27:25