0


使用Selenium实现某网站球员数据采集

引言

随着大数据时代的到来,体育数据变得越来越重要。无论是对于球迷还是分析师,了解球员的表现数据都是十分必要的。本文将介绍如何使用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规则,并适当增加访问间隔时间。


本文转载自: https://blog.csdn.net/yang30123/article/details/142969426
版权归原作者 小橙子来咯~ 所有, 如有侵权,请联系我们删除。

“使用Selenium实现某网站球员数据采集”的评论:

还没有评论