BeautifulSoup提取赛事页面table异常:Group3页面仅返回2个元素
问题解决:Group3页面BeautifulSoup提取表格异常
问题概述
使用Python的BeautifulSoup提取赛事页面表格时,Group2页面可正常返回9个table-sm类的表格,但Group3页面仅返回2个,且第二个表格包含页面头部以下的全部内容。浏览器控制台显示该页面实际存在8个对应元素,但BeautifulSoup无法正确识别。
可能原因
这类差异通常源于HTML结构存在未闭合标签,lxml解析器对不规范HTML的容错性较弱,会错误地将后续内容嵌套进同一个表格;而浏览器的渲染引擎容错性更强,能正确解析并展示元素结构。
解决方案
1. 切换HTML解析器
将lxml替换为Python内置的html.parser,它对不规范HTML的兼容性更好:
import requests from bs4 import BeautifulSoup url_gr_3 = 'https://rfetm.es/resultados/2022-2023/view.php?liga=Mg==&grupo=3&subgrupo=S&jornada=1&sexo=M' req = requests.get(url_gr_3) # 替换为html.parser解析器 soup = BeautifulSoup(req.content, features="html.parser") data = soup.find_all("table", class_="table-sm") print(len(data)) # 此时应返回与浏览器一致的表格数量
2. 检查原始响应内容
若切换解析器后仍有问题,可先打印Group3页面的原始HTML片段,排查是否存在明显的标签错误:
req = requests.get(url_gr_3) print(req.text[:1000]) # 打印前1000字符检查结构
重点关注是否有未闭合的<table>、<div>等标签,这类问题会直接导致解析器结构识别混乱。
3. 使用CSS选择器定位
如果find_all方法仍异常,尝试用CSS选择器定位目标表格:
data = soup.select("table.table-sm") print(len(data))
验证方式
运行修改后的代码,检查返回的表格数量是否与浏览器控制台显示一致。若数量正确,即可继续从第4个表格开始提取赛事结果。
内容的提问来源于stack exchange,提问作者avidalvi
相关产品推荐
相关产品推荐

