问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用Selenium实现NBA球员数据采集

创作时间:
作者:
@小白创作中心

使用Selenium实现NBA球员数据采集

引用
CSDN
1.
https://blog.csdn.net/yang30123/article/details/142969426

随着大数据时代的到来,体育数据变得越来越重要。无论是对于球迷还是分析师,了解球员的表现数据都是十分必要的。本文将介绍如何使用Python语言结合Selenium库来爬取NBA官方网站上的球员统计数据。通过本教程,我们将能够获取到球员的排名、姓名、所属球队以及他们在比赛中的表现指标如得分、篮板等。

准备工作

在开始之前,请确保已经安装了Python环境,并且安装了以下库:

  • pandas:用于处理和保存数据。
  • selenium:用于自动化浏览器操作。
  • logging:用于记录日志。

此外,还需要下载对应版本的ChromeDriver,并确保它与你的Chrome浏览器版本兼容。

实现步骤

1. 导入所需库

import os
import time
import pandas as pd
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
import logging  

2. 配置WebDriver

首先,我们需要配置Selenium WebDriver,指定ChromeDriver的位置,并创建一个Chrome浏览器实例。

service = Service("./driver/chromedriver.exe")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)  

3. 定义数据收集函数

接下来定义一个函数 get_data() 来加载网页并提取数据。

3.1 访问目标网址

通过 driver.get() 方法访问目标网站。

def get_data(url):
    driver.get(url)
    driver.implicitly_wait(20)
    time.sleep(5)  

这里使用了隐式等待(implicitly_wait)和显式等待(time.sleep)来确保页面加载完成。

3.2 提取表格数据

使用XPath定位器找到页面中的表格元素,并遍历每一行数据。

table = driver.find_element(By.XPATH, "//*[@id='app']/div[2]/div/div[2]/section[1]/div[3]/div/div/div/table/tbody")
rows = table.find_elements(By.TAG_NAME, "tr")  

对于每行数据,我们解析出每个单元格的信息,并构造一个字典来存储单个球员的数据。

cols = row.find_elements(By.TAG_NAME, "td")
player_data = {
    "排名": cols[0].text,
    "球员姓名": cols[1].text.replace("\n", " "),
    "球队": cols[2].text,
    "比赛场次": cols[3].text,
    "出场时间": cols[4].text,
    "得分": cols[5].text,
    "篮板": cols[6].text,
    "助攻": cols[7].text,
    "抢断": cols[8].text,
    "盖帽": cols[9].text,
    "投篮命中率": cols[10].text,
    "三分命中数": cols[11].text,
    "三分命中率": cols[12].text,
    "罚球命中率": cols[13].text,
}  

3.3 分页处理

为了获取多页数据,我们需要模拟点击翻页按钮。

for i in range(1, 6):
    ...
    driver.find_element(By.XPATH, "//*[@id='app']/div[2]/div/div[2]/section[1]/ul/li[7]/i").click()
    time.sleep(10)  

4. 数据保存

收集完所有数据后,我们将其保存到Excel文件中。

def save_data(data):
    if not os.path.exists('NBA球员数据.xlsx'):
        df1 = pd.DataFrame(data)
        df1.to_excel('NBA球员数据.xlsx', index=False)
    else:
        df2 = pd.read_excel('NBA球员数据.xlsx')
        df2 = pd.concat([df2, pd.DataFrame(data)], ignore_index=True)
        df2.to_excel('NBA球员数据.xlsx', index=False)  

如果文件不存在,则创建文件并保存数据。如果文件已存在,则追加新数据。

5. 主程序入口

最后,在主程序入口处调用 get_data() 函数。

if __name__ == '__main__':
    url = "https://china.nba.cn/statistics/playerstats"
    get_data(url)
    driver.quit()  

结语

以上就是使用Python+Selenium爬取NBA球员统计数据的基本过程。通过这个简单的示例,我们可以看到自动化浏览器操作的强大之处。需要注意的是,当网站结构发生变化时,Xpath可能需要调整。同时,频繁访问网站可能会触发网站的反爬机制,因此在实际应用时应当遵守网站的robots.txt规则,并适当增加访问间隔时间。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号