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

爬取McMaster-Carr零件价格无报错但输出不显示价格问题咨询

问题根因

代码拿不到价格是两个核心问题导致的:

  1. 裸requests请求没有携带合法浏览器标识,被McMaster-Carr的反爬机制直接拦截,返回的根本不是普通用户看到的商品详情页,自然不存在价格数据。
  2. 选择器逻辑完全错误:soup.find_all('div')会抓取页面所有div节点,没有做任何和价格相关的节点匹配,就算页面正常返回,输出的全量div内容也很难直接定位到价格字段。

另外你贴的复现代码缺了from bs4 import BeautifulSoup的导入语句,真运行会直接抛NameError,你本地跑无报错应该是漏贴了这行。

修复方案
  • 给请求加上真实浏览器的请求头,重点携带User-Agent字段,模拟普通用户访问绕过基础反爬。
  • 替换全量抓div的逻辑,用属性选择器定位挂载价格的DOM节点。
  • 控制请求频率,短时间高频访问会被网站封IP,同样会拿不到正常页面内容。

修复后的可运行代码:

import requests
from bs4 import BeautifulSoup

# 替换为你自己浏览器的真实UA,打开浏览器F12在网络请求的请求头里就能复制到
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
}

url = "https://www.mcmaster.com/91251A051/"
resp = requests.get(url, headers=headers, timeout=10)
resp.encoding = resp.apparent_encoding

soup = BeautifulSoup(resp.text, "html.parser")
# 匹配class名带price的div节点,也就是价格挂载节点
price_items = soup.select('div[class*="price"]')
for item in price_items:
    content = item.get_text(strip=True)
    if content and "$" in content:
        print(f"抓取到价格:{content}")

排查提示:如果加了请求头还是拿不到价格,先打印resp.text看返回的源码是不是正常商品页,如果出现人机验证、访问拦截的提示,就是IP被风控了,换正常住宅IP再试即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:57:28