国足晋级12强 | 爬取《NBA30支球队》“现役球员信息”,再来看看篮球吧!

网友投稿 708 2022-10-10

国足晋级12强 | 爬取《NBA30支球队》“现役球员信息”,再来看看篮球吧!

国足晋级12强 | 爬取《NBA30支球队》“现役球员信息”,再来看看篮球吧!

我爸对篮球真可是相当钟爱,基本是每个赛季必追。我就不同了,自从高中毕业后,就再也没怎么看篮球了。于是,我就有感而发,是否可以爬取现役球员的一些信息,看看我还有几个认识的。

1. 页面分析

我爬取的页面是腾讯体育,链接如下

观察上图:左边展示的分别是NBA的30支球队,右边就是每只球队对应球员的详细信息。

整个爬虫思路简化如下:

① 获取每支球员页面的url;② 利用Python代码获取每个网页中的数据;③ 将获取到的数据,整理后存储至不同的数据库;

那么,现在要做的就是找到每支球员页面的url,去发现它们的关联。

# 76人火箭热火数据爬取

关于selenium的的使用配置,我在一篇文章中详细讲述过,贴上这个链接供大家参考: 《selenium import webdriver# 创建浏览器对象,该操作会自动帮我们打开Google浏览器窗口browser = webdriver.Chrome()# 调用浏览器对象,向服务器发送请求。该操作会打开Google浏览器,并跳转到“百度”首页browser.get("最大化窗口browser.maximize_window()# 获取球员中文名chinese_names = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[2]/a')chinese_names_list = [i.text for i in chinese_names]# 获取球员英文名english_names = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[3]/a')english_names_list = [i.get_attribute('title') for i in english_names] # 获取属性# 获取球员号码numbers = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[4]')numbers_list = [i.text for i in numbers_list]# 获取球员位置locations = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[5]')locations_list = [i.text for i in locations_list]# 获取球员身高heights = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[6]')heights_list = [i.text for i in heights_list]# 获取球员体重weights = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[7]')weights_list = [i.text for i in weights_list]# 获取球员年龄ages = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[8]')ages_list = [i.text for i in ages_list]# 获取球员球龄qiu_lings = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[9]')qiu_lings_list = [i.text for i in qiu_lings_list]

这里只爬取了一支球队,剩下29支球队球员数据的爬取任务交给你们。整个代码部分,基本上大同小异,我写了一个,你们照葫芦画瓢。【就一个循环,还不简单呀!】

3. 存储至txt

将数据保存到txt文本的操作非常简单,txt几乎兼容所有平台,唯一的缺点就是不方便检索。要是对检索和数据结构要求不高,追求方便第一的话,请采用txt文本存储。

注意:txt中写入的是str字符串。

txt文档写入数据的规则是这样的:从头开始,从左至右一直填充。当填充至最右边后,会被挤到下一行。因此,如果你想存入的数据规整一点,可以自动填入制表符“\t”和换行符“\n”。

以本文为例,将获取到的数据,存储到txt文本中。

for i in zip(chinese_names_list,english_names_list,numbers_list,locations_list,heights_list,weights_list,ages_list,qiu_lings_list): with open("NBA.txt","a+",encoding="utf-8") as f: # zip函数,得到的是一个元组,我们需要将它转换为一个字符串 f.write(str(i)[1:-1]) # 自动换行,好写入第2行数据 f.write("\n") f.write("\n")

部分截图如下:

4. 存储至excel

excel有两种格式的文件,一种是csv格式,一种是xlsx格式。将数据保存至excel,当然是使用pandas库更方便。

import pandas as pd# 一定要学会组织数据df = pd.DataFrame({"中文名": chinese_names_list, "英文名": english_names_list, "球员号码": numbers_list, "位置": locations_list, "身高": heights_list, "体重": weights_list, "年龄": ages_list, "球龄": qiu_lings_list}) # to_excel()函数df.to_excel("NBA.xlsx",encoding="utf-8",index=None)

结果如下:

5. 存储至mysql

MySQL是一个关系型数据库,数据是采用类excel的二维表来保存数据的,即行、列组成的表,每一行代表一条记录,每一列代表一个字段。

关于Python操作MySQL数据库,我曾经写了一篇博客,大家可以参考以下

为了让大家更明白这个过程,我这里分布为大家讲解:

① 创建一个表nba

我们想要往数据库中插入数据,首先需要建立一张表,这里命名为nba。

import pymysql# 1. 连接数据库db = pymysql.connect(host='localhost',user='root', password='123456',port=3306, db='demo', charset='utf8')# 2. 创建一个表# 创建一个游标对象;cursor = db.cursor() # 建表语句;sql = """ create table NBA( chinese_names_list varchar(20), english_names_list varchar(20), numbers_list varchar(20), locations_list varchar(20), heights_list varchar(20), weights_list varchar(20), ages_list varchar(20), qiu_lings_list varchar(20) )charset=utf8 """# 执行sql语句;cursor.execute(sql)# 断开数据库的连接;db.close()

② 往表nba中插入数据

import pymysql# 1. 组织数据data_list = []for i in zip(chinese_names_list,english_names_list,numbers_list,locations_list,heights_list,weights_list,ages_list,qiu_lings_list): data_list.append(i)# 2. 连接数据库db = pymysql.connect(host='localhost',user='root', password='123456',port=3306, db='demo', charset='utf8')# 创建一个游标对象;cursor = db.cursor()# 3. 插入数据sql = 'insert into nba(chinese_names_list,english_names_list,numbers_list,locations_list,heights_list,weights_list,ages_list,qiu_lings_list) values(%s,%s,%s,%s,%s,%s,%s,%s)'try: cursor.executemany(sql,data_list) db.commit() print("插入成功")except: print("插入失败") db.rollback()db.close()

结果如下:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:用于在Kafka上构建无状态应用程序的流处理框架(无状态类应用 kafka)
下一篇:MyBatis拦截器动态替换表名的方法详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~