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

如何使用BeautifulSoup查找不包含指定class的标签?

你可以通过以下几种常见方案直接筛选出不含TFuture类的表格行:

方案1:CSS选择器(通用度最高,绝大多数爬虫库都支持)

直接用CSS的:not()伪类排除目标类,选择器语法为:tr:not(.TFuture)
该选择器在你的示例结构下,会自动匹配所有不带TFuture类的<tr>元素:

<tr class="TRow2 TPresent">
<tr class="TRow1 TPast">
<tr class="TRow2">

不同常用爬虫库的使用示例:

  • BeautifulSoup 用法
from bs4 import BeautifulSoup

soup = BeautifulSoup(页面源码文本, 'lxml')
valid_rows = soup.select('tr:not(.TFuture)')
  • PyQuery 用法
from pyquery import PyQuery as pq

doc = pq(页面源码文本)
valid_rows = doc('tr:not(.TFuture)')
  • Selenium 用法
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get(目标页面地址)
valid_rows = driver.find_elements(By.CSS_SELECTOR, 'tr:not(.TFuture)')

方案2:XPath 方案

如果你的场景更适配XPath选择器,可以使用如下语法:

//tr[not(contains(@class, 'TFuture'))]

如果需要避免类名部分匹配(比如避免误筛到类名为TFutureOld这类包含TFuture字符串的元素),可以使用更严谨的写法:

//tr[not(contains(concat(' ', @class, ' '), ' TFuture '))]

Python 结合 lxml 使用示例:

from lxml import etree

tree = etree.HTML(页面源码文本)
valid_rows = tree.xpath("//tr[not(contains(@class, 'TFuture'))]")

方案3:手动遍历过滤(兼容性最好,适合所有场景)

如果所用工具不支持上述选择器语法,可以手动遍历所有行过滤:

from bs4 import BeautifulSoup

soup = BeautifulSoup(页面源码文本, 'lxml')
all_rows = soup.find_all('tr')
valid_rows = []
for row in all_rows:
    # 获取当前行的class列表,默认返回空列表避免无class属性时报错
    class_list = row.get('class', [])
    if 'TFuture' not in class_list:
        valid_rows.append(row)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:45:03