引言
随着大数据时代的到来,体育数据变得越来越重要。无论是对于球迷还是分析师,了解球员的表现数据都是十分必要的。本文将介绍如何使用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规则,并适当增加访问间隔时间。
版权归原作者 小橙子来咯~ 所有, 如有侵权,请联系我们删除。