Categories
网络服务项目

在数据分析和数据科学领域,数据采集是一个非常重要的步骤。最近,我完成了一个有趣的项目,使用Python和Selenium库来采集NBA球员的信息,并将这些数据存储到Excel表格中。在这篇文章中,我将分享我的代码实现和一些关键的编程技巧。

项目背景

NBA球员的统计数据对于球迷、分析师和球队管理层来说都是宝贵的资源。通过分析这些数据,我们可以了解球员的表现和潜在价值。然而,这些数据通常分散在不同的网页上,需要手动收集和整理。为了自动化这个过程,我决定编写一个Python脚本,使用Selenium库来模拟浏览器操作,分页采集数据,并使用pandas库来处理和存储数据。

环境准备

在开始之前,确保你的环境中安装了以下库:

pandas:用于数据处理和存储。selenium:用于模拟浏览器操作。webdriver:用于控制Chrome浏览器。你还需要下载ChromeDriver,这是Chrome浏览器的自动化驱动程序,确保其版本与你的Chrome浏览器相匹配。

代码实现

首先,我们导入了必要的库,并设置了日志记录,以便在爬取过程中跟踪进度和可能出现的错误。

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

# 初始化日志记录

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

接下来,我们定义了get_data函数,它接受一个URL作为参数,并使用Selenium打开网页,然后分页采集数据。

def get_data(url):

data = []

driver.get(url)

driver.implicitly_wait(20)

time.sleep(5)

for i in range(1, 6):

logging.info(f"正在爬取第{i}页数据")

# 找到球员数据表并遍历每一行

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")

for row in rows:

cols = row.find_elements(By.TAG_NAME, "td")

player_data = {

"排名": cols[0].text,

"球员姓名": cols[1].text,

"球队": cols[2].text,

# ... 其他字段

}

data.append(player_data)

print(player_data)

driver.find_element(By.XPATH, "//*[@id='app']/div[2]/div/div[2]/section[1]/ul/li[7]/i").click()

time.sleep(5)

save_data(data)

logging.info(f"数据保存成功")

在采集完所有页面的数据后,我们定义了save_data函数,它将采集到的数据转换为pandas DataFrame,并保存到Excel文件中。

def save_data(data):

file = 'NBA球员数据.xlsx'

df = pd.DataFrame(data)

df.to_excel(file, index=False)

logging.info(f"数据保存成功")

最后,我们在主函数中调用get_data函数,并在完成后关闭浏览器。

if __name__ == '__main__':

url = "https://china.nba.cn/statistics/playerstats"

get_data(url)

driver.quit()

总结

通过这个项目,介绍了如何使用Selenium和pandas来采集和处理网页数据,还了解了如何使用日志记录来跟踪程序的执行情况。这个项目展示了自动化数据采集的强大能力,可以大大节省手动收集数据的时间和努力。