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

Python+BeautifulSoup实现列表嵌入MLB球员页超链接

实现MLB球员姓名跳转链接嵌入方案

需求目标

将mlb.com统计页每位球员的官方个人页面链接,嵌入到列表内的球员名称元素中,实现点击球员姓名即可跳转至其专属数据统计页的效果。

原有代码问题

from bs4 import BeautifulSoup
import requests 
import re 

# Request URL 

url_1 = 'https://www.mlb.com/stats/'
req = requests.get(url_1).text
document = BeautifulSoup(req, 'html.parser')

# Body 

tbody = document.tbody

# Headers

thead = document.thead 

# Player Names 

full_name = tbody.find_all('a') 

# List of Players 

players_list = []

for name in full_name: 
    if name.get('aria-label'):
        names = name.get('aria-label')
        players_list.append(names)

# List of Links

hrefs_list = []

hrefs = tbody.find_all('a',href = True) 

# Players & Their Links 

for link,player in zip(hrefs, players_list):
    href_link = link['href']
    if re.search('^/player', href_link):
        stats_link = f'https://www.mlb.com{href_link}'
        hrefs_list.append(stats_link)
        hyperlink_format = f'<a href= {stats_link}>{player}</a>'
print(dict(zip(players_list, hrefs_list)))

原有代码无法生效的核心原因有4点:

  • 未携带合法浏览器请求头,直接发起请求会被MLB站点反爬策略拦截,返回的页面内容不完整,无法正确定位球员数据表格。
  • 分两次独立查找页面<a>标签分别提取球员名、链接,表格区域内存在球队、榜单排名等其他非球员入口的a标签,两次查询返回的元素数量、顺序无法对齐,zip配对时必然出现姓名与链接错配。
  • 拼接超链接标签时href属性值未添加引号,生成的HTML语法不符合规范,会导致链接跳转失效。
  • 代码中虽然拼接了超链接格式字符串,但未对结果做存储和结构化输出,最终仅打印普通的姓名-链接字典,没有生成可直接使用的带嵌入链接的球员列表。

修改后可运行代码

from bs4 import BeautifulSoup
import requests 
import re 

url_1 = 'https://www.mlb.com/stats/'
# 携带标准浏览器请求头,绕过基础反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
req = requests.get(url_1, headers=headers).text
document = BeautifulSoup(req, 'html.parser')

tbody = document.tbody
player_link_list = []

# 单次遍历直接筛选球员链接,同步提取姓名和对应路径,从根源避免配对错位
for a_tag in tbody.find_all('a', href=True):
    current_href = a_tag['href']
    # 仅匹配球员个人页路径规则,过滤其他无关链接
    if re.match(r'^/player/', current_href):
        player_name = a_tag.get('aria-label', '').strip()
        if not player_name:
            continue
        # 拼接完整球员页地址,href属性值加引号保证HTML语法合法
        full_player_url = f'https://www.mlb.com{current_href}'
        player_hyper_tag = f'<a href="{full_player_url}">{player_name}</a>'
        player_link_list.append(player_hyper_tag)

# 输出结果可直接嵌入HTML列表使用
for hyper_tag in player_link_list:
    print(hyper_tag)

效果说明

运行代码后输出的每一项都是符合HTML规范的球员超链接标签,直接嵌入页面列表即可实现点击姓名跳转至对应球员MLB官方个人页的效果,不会出现链接错配、跳转失效的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:03:31