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

使用BeautifulSoup爬取网站时如何获取同名class的全部或第二个表格?

代码调整方案

原代码仅能抓取第一个匹配元素的核心逻辑缺陷:find()是BeautifulSoup提供的单节点匹配接口,只会返回HTML文档流中第一个符合筛选条件的元素,无法命中后续同规则的节点。

场景1:输出两个匹配表格的全部内容

将原代码中的find()替换为find_all(),该接口会把所有符合筛选条件的元素,按照在HTML中的出现顺序整理成列表返回:

page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
# 替换find为find_all,拿到所有class为table3的tr元素
all_matched = soup.find_all("tr", {"class": "table3"})

# 遍历列表逐个输出内容
for pos, content in enumerate(all_matched):
    print(f"--- 第{pos+1}个匹配表格内容 ---")
    print(content.prettify())

列表的元素顺序和页面HTML的渲染顺序完全一致,第一个元素是原代码能抓到的内容,第二个就是此前被遗漏的表格信息。

场景2:仅输出第二个匹配表格的内容

拿到find_all()返回的元素列表后,通过列表索引直接定位第二个元素即可(Python列表为0起始索引,第二个元素对应索引值1):

page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
all_matched = soup.find_all("tr", {"class": "table3"})

# 增加长度判断,避免页面结构变动、匹配元素数量不足时引发的索引越界报错
if len(all_matched) >= 2:
    second_table = all_matched[1]
    print(second_table.prettify())

如果后续页面中同class的匹配元素数量增加,只要数清楚目标表格在文档中的实际出现次序,修改对应的列表索引值就能精准定位,不需要重写选择器逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 19:06:08