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
相关产品推荐
相关产品推荐

