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

使用requests和BeautifulSoup爬虫时无法通过class定位span元素

问题原因分析
  • 核心原因是该网站的促销商品内容为JavaScript动态渲染:你在浏览器开发者工具里看到的HTML结构是页面加载完成后JS执行渲染出来的,而requests库只能拿到初始的静态HTML源码,这份源码里根本不存在你要找的带对应class的span标签,所以匹配结果为空。
  • 次要排查点:requests默认的请求头会被很多网站识别为爬虫,有可能你拿到的返回结果本身就是网站的拦截/验证页面,而非正常的促销商品页。可以先打印response.status_code和response.text确认返回内容是否符合预期。
可行解决方案

方案1:使用支持JS渲染的工具抓取(适合快速实现)

用Selenium、Playwright这类无头浏览器工具模拟真实浏览器加载页面,等JS执行完成后再解析DOM,示例代码如下:

# 提前安装依赖:pip install selenium webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import time

url = 'https://www.ah.nl/bonus'

# 初始化Chrome浏览器(自动匹配对应版本的驱动)
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get(url)
# 等待页面内容加载完成,也可以用Selenium的显式等待指定元素出现,效率更高
time.sleep(3)

# 读取渲染完成的完整页面源码
soup = BeautifulSoup(driver.page_source, 'html.parser')
product_spans = soup.find_all('span', {'class': 'line-clamp_root__3yA0X line-clamp_active__2502b'})

# 提取所有商品名
product_names = [span.get_text(strip=True) for span in product_spans]
print(product_names)

# 关闭浏览器进程
driver.quit()

方案2:直接抓取数据接口(效率更高)

打开浏览器开发者工具的「网络」面板,筛选Fetch/XHR请求,刷新页面后找到返回促销商品数据的接口,直接请求该接口拿到结构化的JSON数据,无需解析HTML,性能和稳定性都更好。

注意事项
  • 爬虫请求时建议添加合法的User-Agent请求头,控制请求频率,避免触发网站的反爬策略。
  • 抓取数据前请确认符合目标网站的robots协议和使用条款。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:24:08