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

如何用BeautifulSoup获取特定层级结构下带属性的td标签文本?

问题分析与解决

你的代码返回空列表主要有两个问题:

  1. CSS选择器逻辑错误:.stats_table:has(> [data-row])里的>是直接子元素选择器,但tr[data-row]嵌套在<tbody>里,并不是<table>的直接子元素,所以这个选择器匹配不到任何元素。
  2. 目标元素定位错误:你要抓取的是<td>的文本,但原代码选择的是<table>元素,方向不对。

修正后的代码

直接定位到目标<td>元素,使用精准的层级选择器:

import requests
from bs4 import BeautifulSoup

response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# 精准定位到符合层级要求的td标签
target_tds = soup.select("div.stats-table table.stats_table tr[data-row] td[data-stat]")
# 提取所有td的文本
all_data = [td.get_text(strip=True) for td in target_tds]
print(all_data)

进阶:按行整理数据(更实用)

如果想把每一行的统计数据整理成字典(把data-stat属性作为键,文本作为值),可以这样写:

import requests
from bs4 import BeautifulSoup

response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# 先获取所有符合条件的行
target_rows = soup.select("div.stats-table table.stats_table tr[data-row]")
all_rows_data = []
for row in target_rows:
    row_data = {}
    # 遍历当前行的所有td
    for td in row.select("td[data-stat]"):
        stat_key = td["data-stat"]
        stat_value = td.get_text(strip=True)
        row_data[stat_key] = stat_value
    all_rows_data.append(row_data)

# 打印整理后的数据
for idx, data in enumerate(all_rows_data):
    print(f"第{idx+1}行数据:{data}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:06:31