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

如何使用BeautifulSoup抓取Nike特卖页多配色商品的全部URL及相关信息

Nike促销页多配色商品全URL采集解决方案

问题根因

你当前使用requests+BeautifulSoup的组合只能拉取页面初始静态HTML源码,Nike多配色商品的其余配色URL并未预置在初始DOM中,需要鼠标悬浮触发前端JS逻辑才会更新商品卡片的链接属性,因此静态解析无法拿到全量数据。

可行采集方案

方案1:动态浏览器模拟(逻辑简单兼容性强)

使用Selenium/Playwright等自动化工具模拟浏览器操作,主动触发hover事件获取所有配色对应的链接,示例代码如下:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
import time

# 初始化Chrome浏览器,需提前配置对应版本的ChromeDriver
driver = webdriver.Chrome()
driver.get("https://www.nike.com/w/sale-3yaep")
# 等待页面资源加载完成
time.sleep(3)

all_links = set()
# 遍历所有商品卡片
for prod_card in driver.find_elements(By.CLASS_NAME, "product-card__body"):
    # 先收录默认配色链接
    default_link = prod_card.find_element(By.TAG_NAME, "a").get_attribute("href")
    all_links.add(default_link)
    # 获取当前卡片下所有配色色块
    color_tiles = prod_card.find_elements(By.CLASS_NAME, "colorway-item")
    for tile in color_tiles:
        # 模拟鼠标悬浮在色块上
        ActionChains(driver).move_to_element(tile).perform()
        time.sleep(0.2)
        # 读取更新后的商品链接
        updated_link = prod_card.find_element(By.TAG_NAME, "a").get_attribute("href")
        all_links.add(updated_link)

# 输出所有去重后的商品链接
for link in all_links:
    print(link)

driver.quit()

该方案无需分析页面数据结构,完全模拟用户操作,兼容官网后续的前端渲染逻辑调整,适合小规模采集使用。

方案2:解析静态页预存JSON(效率更高)

Nike页面加载时会把全量商品数据(包含所有配色的URL)预置在window.INITIAL_REDUX_STATE全局JS变量中,无需触发hover,直接正则提取解析即可,采集效率远高于动态浏览器方案,示例代码如下:

import requests
import re
import json

url = "https://www.nike.com/w/sale-3yaep"
# 配置正常浏览器UA避免被反爬拦截
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"
}
resp = requests.get(url, headers=headers, verify=False)
# 正则匹配全量商品数据
data_match = re.search(r'window\.INITIAL_REDUX_STATE\s*=\s*(.*?);\s*</script>', resp.text, re.S)
if data_match:
    prod_data = json.loads(data_match.group(1))
    all_links = set()
    # 遍历所有商品的所有配色提取链接
    for item in prod_data["Wall"]["products"]:
        for colorway in item["colorways"]:
            all_links.add(colorway["pdpUrl"])
    for link in all_links:
        print(link)

该方案仅需1次请求即可拿到全量数据,无需启动浏览器,适合大规模采集使用,若后续官网调整字段名称,重新核对源码字段即可正常使用。

注意事项

  • 请求时需配置合理的请求头,控制请求频率,避免触发官网反爬策略
  • 若官网更新前端结构,可重新检查静态源码对应字段或类名,调整匹配逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:27:04