如何精准抓取网页中指定的球员出生地与高中信息?

霞舞

霞舞

2026-07-31

727人浏览

原创

如何精准抓取网页中指定的球员出生地与高中信息?

本文教你使用 BeautifulSoup 精准定位 HTML 中带 ID 或语义特征的节点(如 ),并结合文本解析策略稳健提取结构化数据,避免因 DOM 变动导致的抓取失败。

本文教你使用 beautifulsoup 精准定位 html 中带 id 或语义特征的节点(如 ``),并结合文本解析策略稳健提取结构化数据,避免因 dom 变动导致的抓取失败。

在网页数据抓取实践中,“获取特定字段”远不止调用 find_all() 那么简单——关键在于理解目标数据的 HTML 上下文特征。以 Baseball-Reference 球员页面(如 https://www.php.cn/link/ac8120f50c6ca29c78fbd84cde5ab7d5p/paytoja01.shtml)为例,我们想提取“出生地”(Place of Birth)和“高中所在地”(High School Location)。观察页面源码可发现:

  • 出生日期被包裹在 中,这是高优先级定位依据;
  • 出生地通常紧随文本 "was born in " 出现,并终止于下一个 标签前;
  • 高中信息则常出现在

    段落中含 "High school:" 的句子内,后接 链接或纯文本城市名。

下面提供两种互补策略:DOM 导航法(推荐首选)文本锚点解析法(强健性备选)

✅ 方法一:基于语义标签的 BeautifulSoup 定位(稳定、可读性强)

import requests
from bs4 import BeautifulSoup

URL = 'https://www.php.cn/link/ac8120f50c6ca29c78fbd84cde5ab7d5p/paytoja01.shtml'
r = requests.get(URL, timeout=10)
r.raise_for_status()
soup = BeautifulSoup(r.content, 'html.parser')  # 推荐 'html.parser' 而非 html5lib(更轻量、兼容性好)

# ✅ 提取出生日期(利用唯一 ID)
birth_span = soup.find('span', id='necro-birth')
birth_date = birth_span.get_text(strip=True) if birth_span else None

# ✅ 提取出生地:查找包含 "Born:" 的 <p> 标签,再找其内部的 <a> 或直接文本
born_p = soup.find('p', string=lambda s: s and 'Born:' in s)
if not born_p:
    born_p = soup.find('p', string=lambda s: s and 'was born in' in s)

birth_place = None
if born_p:
    # 尝试找 </a><a> 标签内的城市(如 Zanesville, OH)
    a_tag = born_p.find('a')
    if a_tag:
        birth_place = a_tag.get_text(strip=True)
    else:
        # 回退:提取纯文本中 "was born in" 后的内容
        text = born_p.get_text()
        if 'was born in' in text:
            birth_place = text.split('was born in')[-1].strip().split('.')[0].strip()

print(f"出生日期: {birth_date}")      # → November 22, 1972
print(f"出生地: {birth_place}")       # → Zanesville, OH</a></p>

⚠️ 注意事项:

? 方法二:基于文本锚点的字符串解析(应对 DOM 结构不稳)

当 HTML 缺乏稳定 class/id,或需快速验证时,可对原始响应文本进行锚点切分:

txt = r.text  # 使用 .text(Unicode 解码后)而非 .content(bytes)

# 安全提取出生地(含断言防错)
try:
    parts = txt.split("was born in")
    assert len(parts) >= 2, "未找到 'was born in' 文本锚点"
    segment = parts[1].split("")[0]  # 截取到第一个闭合链接
    # 清洗:移除残留 HTML 标签(如 <span>...)
    import re
    birth_place_fallback = re.sub(r']+>', '', segment).strip().split('.')[0].strip()
except (IndexError, AssertionError, Exception) as e:
    birth_place_fallback = None
    print(f"[警告] 文本解析失败: {e}")

print(f"(备选)出生地: {birth_place_fallback}")</span>

? 扩展至批量采集 Colorado 相关球员

要系统识别“出生地或高中在 Colorado”的球员,建议:

  1. 先构建球员 URL 列表(如通过 B-Ref 全球员索引页 的字母导航页爬取);
  2. 对每个球员页并发请求 + 异常重试(推荐 concurrent.futures.ThreadPoolExecutor);
  3. 统一结构化输出为字典
player_data = {
    "name": soup.find('h1', {'itemprop': 'name'}).get_text(strip=True),
    "birth_place": birth_place,
    "high_school_state": "CO" if ("Colorado" in str(soup) or "CO" in str(soup)) else None,
    "url": URL
}

总结:精准抓取 = 观察 → 定位特征(ID/class/文本锚点)→ 选择稳健解析器(BS4 优先)→ 添加容错与日志。避免盲目遍历所有 标签;善用 id、class、邻近上下文(如

中的关键词)和正则清洗,才能让爬虫真正可靠、可维护。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

爬虫 html解析

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
免费爬虫工具有哪些
免费爬虫工具有哪些

免费爬虫工具有Scrapy、Beautiful Soup、ParseHub、Octoparse、Webocton Scriptly、RoboBrowser和Goutte。更多关于免费爬虫工具的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.10

2197

9

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

493

12

墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

9

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

7

20

墨刀AI进阶技巧
墨刀AI进阶技巧

本合集由PHP中文网精心整理,为您提供墨刀AI核心进阶策略指南。内容涵盖高效提示词写作、原型智能生成与微调、结构化导图制作及行业分析报告输出等实战技巧。助您轻松掌握AI设计工具,大幅提升产品设计与团队协作效率。

2026.08.04

8

14

火山引擎实名认证失败怎么办
火山引擎实名认证失败怎么办

火山引擎实名认证失败可能与证件信息填写错误、姓名或企业信息不一致、证件照片不清晰、营业执照状态异常、手机号验证失败或审核资料不完整有关。本专题整理个人认证、企业认证、资料上传、审核退回、重新提交和认证不通过的常见处理方法。

2026.08.04

4

10

火山引擎域名备案流程详解
火山引擎域名备案流程详解

火山引擎域名备案适合需要在火山引擎云服务器、对象存储、CDN或网站服务上绑定域名的用户参考。本专题整理备案入口、账号实名认证、备案类型选择、主体信息填写、网站信息提交、资料上传、初审核验、管局审核和备案失败排查,帮助用户完成网站上线前的备案流程。

2026.08.04

1

10

火山引擎DNS解析配置步骤
火山引擎DNS解析配置步骤

使用火山引擎DNS解析网站域名时,需要确认域名已完成管理接入,并正确配置服务器IP、CNAME地址或验证记录。本专题整理域名添加、记录类型选择、TTL设置、解析状态检查、备案和访问测试等流程,适合新手搭建网站时参考。

2026.08.04

3

10

火山引擎对象存储使用教程
火山引擎对象存储使用教程

火山引擎对象存储适合用于网站图片、视频文件、备份数据、静态资源和应用附件管理。本专题整理TOS控制台入口、存储桶创建、地域选择、权限设置、文件上传、访问链接生成、CDN加速、费用查看和常见上传或访问失败问题,帮助用户快速掌握对象存储基础操作。

2026.08.04

1

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程