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

如何用Beautiful Soup循环抓取类名含可变数字的标签?

嘿,这个问题我之前也碰到过!核心原因是BeautifulSoup的class_参数默认是精确匹配,而那个<p>标签的class属性是多个值(date、datet加上动态数字串),直接传class_='date'会要求元素的class属性完全等于date,自然匹配不到。给你几个靠谱的解决方案:

1. 用CSS选择器(最推荐)

CSS选择器里的.date会匹配所有class包含date的元素,不管它还有其他什么类。代码非常简洁:

from bs4 import BeautifulSoup

# 假设你已经拿到了页面的HTML内容
soup = BeautifulSoup(html_content, 'html.parser')
date_element = soup.select_one('p.date')
if date_element:
    print(date_element.get_text(strip=True))  # 输出日期文本

2. 正则表达式匹配class属性

如果CSS选择器对你的场景不太适用,还可以用正则表达式来匹配class属性的开头(因为date是固定前缀,后面的是动态内容):

import re
from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, 'html.parser')
# 匹配class以"date"开头的<p>标签
date_element = soup.find('p', class_=re.compile(r'^date'))
if date_element:
    print(date_element.get_text(strip=True))

3. 排查是否是动态加载问题

如果上面两种方法都返回None,那大概率是这个日期是通过JavaScript动态渲染的——BeautifulSoup只能解析静态HTML,拿不到JS加载的内容。这时候就得用Selenium这类工具模拟浏览器加载页面:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化浏览器(需要对应浏览器的驱动,比如ChromeDriver)
driver = webdriver.Chrome()
driver.get("目标页面URL")

try:
    # 等待元素加载完成,最多等10秒
    date_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "p.date"))
    )
    print(date_element.text.strip())
finally:
    driver.quit()

先试试前两种方法,一般静态页面的话CSS选择器就能解决问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:42:44