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

求助:使用Beautiful Soup无法通过属性/类定位tr标签

解决Beautiful Soup定位tr元素返回空的问题

问题原因分析

  1. 未精准定位目标容器:你要找的tr元素全部嵌套在页面中id为example2的表格内,直接全局查找tr会受页面其他无关元素干扰,且内置解析器对复杂结构的解析容错性差,导致匹配失败。
  2. 解析器兼容性问题:Python内置的html.parser对部分HTML结构解析不够精准,无法识别元素的属性或类名。

修正后的代码

from bs4 import BeautifulSoup
import requests

table_url = 'https://www.worldometers.info/world-population/population-by-country/'

pop_page = requests.get(table_url).content
# 改用lxml解析器(需先执行 pip install lxml 安装)
table_text = BeautifulSoup(pop_page, 'lxml')

# 先定位到包含目标数据的表格
target_table = table_text.find('table', id='example2')

# 查找带role="row"属性的tr元素
table_rows = target_table.find_all('tr', attrs={"role": "row"})
# 查找带even类的tr元素
even_rows = target_table.find_all('tr', class_='even')

print(f"带role='row'的tr数量:{len(table_rows)}")
print(f"带even类的tr数量:{len(even_rows)}")

无lxml时的替代方案

如果无法安装lxml,可以使用html5lib解析器(需执行pip install html5lib),只需将解析器参数替换为:

table_text = BeautifulSoup(pop_page, 'html5lib')

关键说明

  • 该页面的表格内容为静态渲染,无需处理JavaScript动态加载,requests即可获取完整数据。
  • 先定位目标表格再查找子元素,能有效缩小搜索范围,避免无关元素干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:07:11