python爬取NBA球员数据
时间: 2025-02-20 09:09:39 浏览: 57
### 使用Python实现NBA球员数据的网页爬取
为了完成此任务,需准备相应的开发环境并安装必要的库文件。所使用的编程语言版本为 Python 3.7.0,在集成开发环境中选用 PyCharm 工具[^1]。
#### 准备工作
确保已安装以下库:
- `requests`:用于发送 HTTP 请求获取页面内容。
- `lxml`:提供高效的 XML 和 HTML 解析功能。
- `pandas`:支持结构化数据分析与操作。
- `multiprocessing`:允许创建进程,可用于加速多线程网络请求过程。
对于目标网站 https://www.basketball-reference.com/ 的访问,具体来说是从该站点抓取现役 NBA 球员详情页中的 Per Game 数据表单信息。
#### 获取球队列表链接
通过解析首页上的 "Every NBA Team" 部分来提取各个队伍的具体 URL 地址。这些地址位于 `<tr>` 行标记内的 `<th><a href="...">...</a></th>` 中作为超链接的目标位置。
```python
import requests
from lxml import etree
def fetch_teams_urls():
base_url = 'https://www.basketball-reference.com'
response = requests.get(base_url)
tree = etree.HTML(response.text)
team_links = []
elements = tree.xpath('//table[@id="teams_active"]//tbody/tr/th/a')
for element in elements:
link = f"{base_url}{element.attrib['href']}"
team_links.append(link)
return team_links
```
#### 抓取个人玩家统计数据
针对每一个团队主页进一步深入挖掘其成员名单,并最终定位至每位运动员各自的赛季表现记录页面。这里展示了一个简化版的方法框架,实际应用时可能还需要考虑异常处理机制以及更复杂的逻辑控制[^2]。
```python
def scrape_player_stats(player_page_link):
player_response = requests.get(player_page_link)
parser = etree.HTMLParser()
page_tree = etree.fromstring(player_response.content, parser=parser)
stats_table = page_tree.find(".//*[@id='per_game']")
rows = list(stats_table.iter("tr"))[1:] # 跳过表格头
players_data = []
for row in rows:
columns = [col.text_content().strip() for col in row.findall('td')]
if not any(columns): continue
data_dict = {
'Season': columns[0],
'Age': int(columns[1]),
'Team': columns[2],
'Games Played': int(columns[4]),
'Points per game': float(columns[-1])
}
players_data.append(data_dict)
df = pd.DataFrame(players_data)
return df
```
上述代码片段展示了如何利用 XPath 查询技术从特定路径下选取所需节点集合,并将其转换成易于理解的数据框形式以便后续分析使用[^4]。
阅读全文
相关推荐

















