如何用Python获取可点击文本背后的Schedule专属URL链接
无法提取NBA球队Schedule专属URL的解决方法
问题现状
使用requests和BeautifulSoup爬取NBA球队页面时,仅能获取球队名称及“Roster | Schedule | Stats”文本,无法提取Schedule对应的专属链接。现有代码及运行结果如下:
现有代码
import requests from bs4 import BeautifulSoup import pandas as pd session = requests.Session() session.verify = False session.trust_env = False url = 'https://basketball.realgm.com/nba/teams' response = session.get(url) soup = BeautifulSoup(response.text, 'html.parser') teams = soup.findAll('div',{'class':'small-column-left'}) for team in teams: name = team.get_text().strip() schedule_url = team.get('a[href]') print(name)
运行结果示例
Atlanta Hawks Roster | Schedule | Stats Charlotte Hornets Roster | Schedule | Stats ...
错误原因
- 选择器定位错误:原代码选取的
small-column-left容器包含了球队名称和链接组的所有文本,导致get_text()返回混合内容 - 链接提取方式错误:
team.get('a[href]')不是BeautifulSoup提取子元素属性的正确语法,无法获取到目标链接
修正后的代码
import requests from bs4 import BeautifulSoup session = requests.Session() session.verify = False session.trust_env = False base_url = 'https://basketball.realgm.com' url = f'{base_url}/nba/teams' response = session.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 定位每个球队对应的行元素 team_rows = soup.find_all('tr', class_='row') for row in team_rows: # 提取球队名称 team_name_elem = row.find('td', class_='small-column-left').find('a') team_name = team_name_elem.get_text().strip() # 精准定位Schedule链接并提取完整URL schedule_elem = row.find('a', string='Schedule') if schedule_elem: schedule_full_url = f"{base_url}{schedule_elem.get('href')}" print(f"{team_name}: {schedule_full_url}") else: print(f"{team_name}: 未找到Schedule链接")
修正说明
- 调整选择器:直接定位每个球队所在的行(
tr.row),确保单支球队的信息独立分离 - 精准提取名称:从行内的
small-column-left标签下找到球队名称的<a>元素,避免文本混合 - 定向获取链接:通过
find('a', string='Schedule')直接匹配Schedule对应的链接标签,提取href后拼接成完整可访问的URL
内容的提问来源于stack exchange,提问作者Rajendra Jadhav
相关产品推荐
相关产品推荐

