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

Python爬虫:如何用BeautifulSoup提取包含指定td的tr标签内容?

问题解答

完全可以通过BeautifulSoup实现你要的筛选效果,以下是具体实现方案:

方案1:先定位符合条件的td,反向获取父级tr(执行效率更高)

直接先筛选满足要求的td标签,再向上查找所属的tr即可,示例代码如下:

from bs4 import BeautifulSoup

# 假设你爬取到的页面源码存储在html_content变量中
soup = BeautifulSoup(html_content, "lxml")

# 筛选符合条件的td:类为field2 mcFont 或者 文本内容为"PE"
target_tds = soup.find_all(
    "td",
    lambda tag: (tag.get("class", []) == ["field2", "mcFont"]) or (tag.text.strip() == "PE")
)

# 提取对应tr的内部HTML内容
result = []
for td in target_tds:
    target_tr = td.find_parent("tr")
    # decode_contents()可直接获取标签内部的完整HTML内容,符合你要的输出格式
    result.append(target_tr.decode_contents())

# 输出结果示例:你需要的PE对应内容会存储在result列表中
print(result[0])

方案2:遍历所有tr做条件判断

如果你需要先获取全部tr再做筛选,也可以用以下逻辑:

all_tr = soup.find_all("tr")
result = []
for tr in all_tr:
    # 检查当前tr下是否存在符合条件的td
    match_td = tr.find(
        "td",
        lambda tag: (tag.get("class", []) == ["field2", "mcFont"]) or (tag.text.strip() == "PE")
    )
    if match_td:
        result.append(tr.decode_contents())

注意事项

  • BeautifulSoup中的class是多值属性,返回结果为列表,所以匹配多类时需要和["field2", "mcFont"]列表做对比,不要直接传入字符串"field2 mcFont"
  • 对文本做.strip()处理可以过滤空格、换行符,避免误匹配其他包含PE的无关内容
  • 如果只需要提取文本值不需要HTML结构,可以把decode_contents()替换为get_text(strip=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:27:01