爬取《NBA30支球队》“现役球员信息”,分别存储到3种不同的数据库! |
您所在的位置:网站首页 › nba现役球员身高 › 爬取《NBA30支球队》“现役球员信息”,分别存储到3种不同的数据库! |
我爸对篮球真可是相当钟爱,基本是每个赛季必追。我就不同了,自从高中毕业后,就再也没怎么看篮球了。于是,我就有感而发,是否可以爬取现役球员的一些信息,看看我还有几个认识的。 我爬取的页面是腾讯体育,链接如下: https://nba.stats.qq.com/player/list.htm 此时思路就很清晰了,我们每点击一支球员,右侧就会出现该球队的球员信息。 整个爬虫思路简化如下: ① 获取每支球员页面的url;② 利用Python代码获取每个网页中的数据;③ 将获取到的数据,整理后存储至不同的数据库;那么,现在要做的就是找到每支球员页面的url,去发现它们的关联。 我们每点击一支球队,复制它的url,下面我复制了三支球队的页面url,如下所示: # 76人 https://nba.stats.qq.com/player/list.htm#teamId=20 # 火箭 https://nba.stats.qq.com/player/list.htm#teamId=10 # 热火 https://nba.stats.qq.com/player/list.htm#teamId=14观察上述url,可以发现:url基本一模一样,除了参数teamId对应的数字不一样,完全可以猜测出,这就是每支球队对应的编号,30支球队30个编号。 只要是涉及到“腾讯”二字,基本都是动态网页,我之前碰到过好多次。基础方法根本获取不到数据,不信可以查看网页源码试试:点击鼠标右键——>点击查看网页源代码。 因此如果你想要获取页面中的数据,使用selenuim自动化爬虫,是其中一种办法。 2. 数据爬取关于selenium的的使用配置,我在一篇文章中详细讲述过,贴上这个链接供大家参考: 《https://mp.weixin.qq.com/s/PUPmpbiCJqRW8Swr1Mo2UQ》 我喜欢用xpath,对于本文数据的获取,我都将使用它。关于xpath的使用,那就是另一篇文章了,这里就不详细讲述。 这里只爬取了一支球队,剩下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")部分截图如下: 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)结果如下: MySQL是一个关系型数据库,数据是采用类excel的二维表来保存数据的,即行、列组成的表,每一行代表一条记录,每一列代表一个字段。 关于Python操作MySQL数据库,我曾经写了一篇博客,大家可以参考以下: http://blog.csdn.net/weixin_41261833/article/details/103832017 为了让大家更明白这个过程,我这里分布为大家讲解: ① 创建一个表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()结果如下: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |