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

使用BeautifulSoup爬取Sigma-Aldrich网站无法获取产品数据问题咨询

问题根源
  • 核心逻辑错误:BeautifulSoup 本身没有网络请求能力,仅支持解析已获取的HTML文本。你直接将URL字符串传入构造方法,库只会把这串字符当普通文本处理,根本不会拉取对应网页内容,自然看不到产品数据。
  • 反爬拦截:Sigma-Aldrich 配置了基础反爬规则,无合法浏览器标识的裸请求会被直接拦截,就算补上请求逻辑,不带正常请求头也拿不到真实页面。
  • 地址错误:你粘贴的URL末尾多了转义双引号字符%22,会直接导致请求跳转到错误页面。
  • 加载逻辑问题:站点产品列表为分页加载,单页请求只能获取当前页的产品链接,需要遍历分页参数才能拿全所有内容。
修正方案

先安装依赖:
pip install requests beautifulsoup4

参考代码如下:

import requests
from bs4 import BeautifulSoup

# 已清理原URL末尾多余的转义字符
list_base_url = "https://www.sigmaaldrich.com/GB/en/products/materials-science/biomedical-materials/polymerization-tools"
# 携带常规浏览器请求头,绕过基础反爬校验
request_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-Language": "en-GB,en;q=0.9"
}
# 请求参数
request_params = {
    "country": "GB",
    "language": "en",
    "page": 1
}

# 发起请求获取页面源码
response = requests.get(list_base_url, headers=request_headers, params=request_params, timeout=15)
# 请求失败直接抛出异常,避免解析错误页面
response.raise_for_status()
# 用拿到的HTML源码初始化BeautifulSoup对象
soup = BeautifulSoup(response.text, "html.parser")

# 提取当前页所有产品链接
product_link_list = []
for a_tag in soup.select("a[href*='/product/']"):
    href = a_tag.get("href", "")
    # 补全相对路径链接
    if href.startswith("/"):
        href = "https://www.sigmaaldrich.com" + href
    if "/product/" in href:
        product_link_list.append(href)

# 去重
product_link_list = list(set(product_link_list))
print(f"当前页共获取到{len(product_link_list)}个有效产品链接")
print("前5个链接示例:", product_link_list[:5])
后续爬取注意事项
  • 如果静态请求拿到的HTML里产品数据不全,是因为部分内容通过前端异步接口加载,这种情况可以直接抓浏览器加载产品列表的后端接口,接口返回结构化JSON数据,解析效率比处理HTML高很多。
  • 爬取过程中控制请求间隔,不要短时间发起大量请求,否则会被站点临时封禁IP。
  • 爬取产品详情页时同样需要携带合法请求头,不要直接裸请求链接地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:51:23