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

使用requests模块爬取静态网页产品信息报错解决方案

爬取Nordstrom商品标题与描述的解决方案

报错原因

你的代码抛出AttributeError是两个问题共同导致的:

  • 仅携带User-Agent的请求会被Nordstrom的反爬机制拦截,返回的是校验页面而非真实商品页,目标DOM元素不存在于返回内容中,select_one()匹配失败返回None,对None调用.text就会触发属性错误。
  • 你写的两个CSS选择器和当前页面实际的元素属性不匹配,就算拿到正常页面内容也无法定位到目标字段。

修正后的可运行代码

通过补全常规浏览器请求头绕过基础反爬,直接提取页面内嵌的Next.js结构化商品数据,比匹配DOM选择器稳定性更高,不会因为前端修改class/id属性失效:

import requests
from bs4 import BeautifulSoup
import json

link = 'https://www.nordstrom.com/s/anine-bing-womens-plaid-shirt/6638030'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.9',
    'Referer': 'https://www.nordstrom.com/',
    'Connection': 'keep-alive',
}

with requests.Session() as s:
    s.headers.update(headers)
    res = s.get(link, timeout=15)
    res.raise_for_status()
    soup = BeautifulSoup(res.text, "lxml")
    
    # 提取页面内嵌的结构化商品数据
    data_script = soup.select_one("script#__NEXT_DATA__")
    if not data_script:
        raise RuntimeError("请求被反爬拦截,未获取到有效商品数据")
    page_data = json.loads(data_script.text)
    product_info = page_data['props']['pageProps']['product']
    
    product_title = product_info['title']
    product_desc = product_info['description']

    print("产品标题:", product_title)
    print("产品描述:", product_desc)

注意事项

  • 如果运行后提示被反爬拦截,可以替换为自己当前浏览器真实的User-Agent值,适当降低请求频率即可。
  • 不要短时间内用同一个IP大量发起请求,否则会触发更严格的IP封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:56:49