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

如何用Pandas提取HTML表格指定列的超链接(T20I记分卡为例)

问题

我想要爬取2005年T20I(二十20国际板球赛事)的比赛汇总表,目标是用Pandas爬取表格并提取最后一列「Scorecard(记分卡)」的超链接而非文本。

我试过StackOverflow上的相关方案,用BeautifulSoup提取链接但无效,这也不是我的首选方法;还尝试过URLExtract库,同样没效果。

我希望仅通过Pandas直接实现,不用处理HTML标签。尝试过pandas.read_html的extract_links参数,但该参数会把文本和链接用逗号分隔,而且只能选择all/header/footer/body选项,没法单独提取指定列,提取的链接还不完整。如果能把链接分离到新列,我可以添加前缀补全链接后再和基础表合并,想问能不能通过extract_links实现文本与链接的分离?

我的代码如下:

import pandas as pd
url = 'https://www.espncricinfo.com/records/year/team-match-results/2005-2005/twenty20-internationals-3'
table = pd.read_html(url)[0]
#table = pd.read_html(url, extract_links = "body")[0]
table

解决方案

可以通过extract_links参数实现文本与链接的分离,具体步骤如下:

  1. 使用extract_links="body"读取表格,此时带链接的单元格会返回(显示文本, 相对链接)的元组
  2. 单独处理「Scorecard」列,拆分出文本和链接
  3. 补全链接前缀,将完整链接存入新列,同时保留原文本(或按需替换)

完整代码

import pandas as pd

url = 'https://www.espncricinfo.com/records/year/team-match-results/2005-2005/twenty20-internationals-3'
# 读取表格并提取body区域的链接
table_with_links = pd.read_html(url, extract_links="body")[0]

# 处理Scorecard列,拆分文本与链接
scorecard_col = table_with_links['Scorecard']
# 提取相对链接并补全前缀,生成完整URL列
table_with_links['Scorecard_Link'] = scorecard_col.apply(lambda x: f"https://www.espncricinfo.com{x[1]}")
# 保留原Scorecard显示文本
table_with_links['Scorecard'] = scorecard_col.apply(lambda x: x[0])

# 查看处理后的结果示例
print(table_with_links[['Scorecard', 'Scorecard_Link']].head())

说明

  • extract_links="body"会让表格中包含超链接的单元格返回元组格式:(单元格显示文本, 页面相对URL)
  • 通过apply遍历「Scorecard」列的每个元组,分别提取文本和链接部分
  • 给相对链接添加官网前缀,即可得到可直接访问的完整记分卡链接,存入新增的Scorecard_Link列

整个过程无需额外处理HTML标签,完全通过Pandas实现需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:45:02