如何用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参数实现文本与链接的分离,具体步骤如下:
- 使用
extract_links="body"读取表格,此时带链接的单元格会返回(显示文本, 相对链接)的元组 - 单独处理「Scorecard」列,拆分出文本和链接
- 补全链接前缀,将完整链接存入新列,同时保留原文本(或按需替换)
完整代码
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
相关产品推荐
相关产品推荐

