使用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
相关产品推荐
相关产品推荐

