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

Python爬虫:解析得到的标签名称为何不一致?(基于BeautifulSoup)

解析标签名称不一致&爬取内容不符合预期的解决方案

嘿,我来帮你排查这个问题!你遇到的标签解析不一致、爬取结果不符合预期的情况,大概率是内置HTML解析器的局限性加上选择器不够精准导致的,下面一步步给你解决:

问题根源分析

你用的html.parser是Python自带的解析器,它对复杂、非标准的HTML容错性很差。现代网站(比如MLB的页面)的HTML结构往往包含大量动态生成的元素、未严格闭合的标签,内置解析器处理这些时会出现DOM结构变形——比如原本的section被解析成div,或者标签层级错乱,自然会出现“标签名称不一致”的情况;同时你选的container类名太宽泛,页面里可能有几十个这个类的div,根本不是你要的分数内容容器。

解决方案步骤

1. 替换为更强大的第三方解析器

推荐使用lxml或者html5lib,它们对复杂HTML的解析更准确,容错性更强:

  • 先安装解析器(二选一即可,lxml速度更快):
pip install lxml
# 或者安装html5lib(模拟浏览器解析,容错性最强)
# pip install html5lib

2. 修改代码,使用精准选择器

MLB的分数内容通常在scoreboard类的容器里,我们调整代码定位到正确的元素:

from bs4 import BeautifulSoup
import requests

web_url = 'https://www.mlb.com/scores/2019-05-12'
# 发起请求时添加headers模拟浏览器,避免被反爬拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
response = requests.get(web_url, headers=headers)
# 确保编码正确,避免乱码影响解析
response.encoding = response.apparent_encoding

# 替换为lxml解析器
soup = BeautifulSoup(response.text, "lxml")

# 定位到分数面板的精准容器
scoreboards = soup.find_all('div', class_='scoreboard')

# 提取具体的队伍和分数
for board in scoreboards:
    # 获取主队和客队名称
    team_names = board.find_all('span', class_='team-name-text')
    # 获取对应的分数
    team_scores = board.find_all('div', class_='team-score')
    # 遍历输出有效内容
    if team_names and team_scores:
        away_team, home_team = team_names
        away_score, home_score = team_scores
        print(f"{away_team.get_text(strip=True)} {away_score.get_text(strip=True)} vs {home_team.get_text(strip=True)} {home_score.get_text(strip=True)}")

3. 验证解析结果

运行修改后的代码,你会发现解析出来的DOM结构和浏览器里的一致,也能正确获取到当天的MLB比赛分数了。如果还是有问题,就换成html5lib解析器(把代码里的"lxml"改成"html5lib"),它会完全模拟浏览器的解析逻辑,几乎能处理所有非标准HTML。

额外提示

  • 爬取网站时记得添加User-Agent头,避免被网站识别为爬虫而拦截;
  • 可以用浏览器的开发者工具(F12)查看目标元素的真实结构,确认选择器是否正确——不要凭直觉写类名,要实际检查DOM结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:23:23