Python实战社群

Java实战社群

长按识别下方二维码,按需求添加

扫码关注添加客服

进Python社群▲

扫码关注添加客服

进Java社群

作者丨黄伟呢

来源丨数据分析与统计学之美

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

1. 页面分析

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

https://nba.stats.qq.com/player/list.htm

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

此时思路就很清晰了,我们每点击一支球员,右侧就会出现该球队的球员信息。

整个爬虫思路简化如下:

  • ① 获取每支球员页面的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个编号。

只要是涉及到“腾讯”二字,基本都是动态网页,我之前碰到过好多次。基础方法根本获取不到数据,不信可以查看网页源码试试:点击鼠标右键——>点击查看网页源代码。

部分截图如下

接着,将网页中的某个数据(你要获取的)复制,然后再源代码页面中,点击crtl + f,调出“搜索框”,将复制的数据粘贴进去。如果和上图一样,出现0条记录,则基本可以判断该网页属于动态网页,直接获取源码,一定找不到你要的数据。

因此如果你想要获取页面中的数据,使用selenuim自动化爬虫,是其中一种办法。

2. 数据爬取

我喜欢用xpath,对于本文数据的获取,我都将使用它。关于xpath的使用,那就是另一篇文章了,这里就不详细讲述。

说了这么多,咋们直接上代码吧!

from selenium import webdriver# 创建浏览器对象,该操作会自动帮我们打开Google浏览器窗口
browser = webdriver.Chrome()# 调用浏览器对象,向服务器发送请求。该操作会打开Google浏览器,并跳转到“百度”首页
browser.get("https://nba.stats.qq.com/player/list.htm#teamId=20")# 最大化窗口
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]# 获取球员位置
locations = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[5]')
locations_list = [i.text for i in locations]# 获取球员身高
heights = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[6]')
heights_list = [i.text for i in heights]# 获取球员体重
weights = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[7]')
weights_list = [i.text for i in weights]# 获取球员年龄
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数据库,我曾经写了一篇博客,大家可以参考以下:

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

结果如下:

程序员专栏 扫码关注填加客服 长按识别下方二维码进群

近期精彩内容推荐:  

 几句话,离职了

 中国男性的私密数据大赏,女生勿入!

 为什么很多人用“ji32k7au4a83”作密码?

 一个月薪 12000 的北京程序员的真实生活 !

在看点这里好文分享给更多人↓↓

爬取NBA30支球队“现役球员信息”,分别存储至txt、excel、mysql数据库!相关推荐

  1. 【Python爬虫系列教程 11-100】Python网络爬虫实战:最简单的Pandas 中的read_html一行代码爬取网页表格型数据,就可以爬取虎扑体育NBA球员信息

    文章目录 爬取对象 分析 实现代码 爬取对象 虎扑是一个认真而有趣的社区,每天有众多JRs在虎扑分享自己对篮球.足球.游戏电竞.运动装备.影视.汽车.数码.情感等一切人和事的见解,热闹.真实.有温度. ...

  2. 【附上解释】爬取A股所有上市公司的信息并存储到数据库或者是csv文件中

    文章目录 输入到mysql版 输出到csv文件版本 输入到mysql版 输出会有警告,但是不影响. 附上了详细的解释~ import pandas as pd import requests impo ...

  3. 使用selenium爬取电视剧排行榜中电视剧的信息并存储到excel中

    本人是爬虫初学者,想通过爬取电视剧信息来巩固自己所学的一些知识,但是在一些网站中并没有找到类似于page的参数,或者就是参数加密,自己的能力没法解开,导入无法使用下一页的功能.所以我就想到了selen ...

  4. 实现Scrapy框架爬取酷狗音乐Top100名,并存储为TXT,JSON,CSV和Excel格式数据

    前言 实现Scrapy框架爬取网页数据(酷狗音乐Top100名,包括排名信息.歌手信息.歌曲名.歌曲时长) 一.创建项目 在cmd中输入: scrapy startproject kugouScrap ...

  5. 爬取2017年底最新中国全国五级行政区划代码省市区县乡镇村MySQL数据库

    刚开始学习爬虫,学了pyspider,就想练练手.想到不久前需要一些云南地区的行政数据,还是在网络百度半天才下载的.现在既然会爬虫了,那就自己动手,随时可以用相对新的数据了(因为统计局最新的才更新到2 ...

  6. 爬取汽车之家北京二手车信息

    爬取汽车之家北京二手车信息 经测试,该网站:https://www.che168.com/beijing/list/ 反爬机制较低,仅需要伪造请求头设置爬取速率,但是100页之后需要登录,登录之后再爬 ...

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

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

  8. python 爬取NBA中国官网球员数据

    现在很多网站的数据都是通过Ajax动态加载的,我认为这恰恰降低了我们爬取的难度,因为我们无需考虑如何解析数据,只需要将json文件转换为字典形式,通过字典的键就可以取得我们所需要的数据. 爬取网站:N ...

  9. python人人贷爬虫_爬取人人贷网上部分借贷信息以及数据可视化

    一.主题式网络爬虫设计方案:爬取人人贷网上部分借贷信息 1.主题式网络爬虫名称:爬取人人贷网上部分信息 2.主题式网络爬虫的内容与数据特征分析:爬取人人贷部分信息数据,借贷信息 3.主题式网络爬虫设计 ...

最新文章

  1. EF6 MySQL错误之“Specified key was too long; max key length is 767 bytes”
  2. 阿里云发布vSphere虚拟机备份服务 ,网络带宽有限条件下依然能有效保护数据...
  3. 机器学习在销售报价单的产品推荐场景中的作用
  4. 你绝对干过的15件傻事儿
  5. 2019蓝桥杯省赛---java---B---2(不同子串)
  6. mac android mtp,果粉也用安卓!MacBook连接安卓机最好的工具
  7. v-for能倒序遍历吗_神级遍历——morris
  8. 把socket相关函数封装成类
  9. windows程序窗体创建流程模型A--利用基本数据类型
  10. stm32中断优先级_浅谈STM32串口USART1的使用
  11. python3.3.2_Python代码2转3、3转2的方法
  12. 读写SQL数据库Image字段
  13. android 菜鸟面单打印_Android TSC热敏标签打印机打印
  14. android app反解工具,安卓反编译逆向工具:Apktool + dex2jar 教程
  15. 计算机日常故障及维修,电脑常见问题和故障处理
  16. TA入门笔记(十五)
  17. 高效使用Chrome搜索精准内容
  18. 【云原生|中间件】我们为什么要使用DCM?
  19. 《谍影重重4》虎头蛇尾
  20. 【MPI】矩阵向量乘法

热门文章

  1. 做一个简单的java小游戏--单机版五子棋
  2. JS监控手机或APP返回事件
  3. 网站长期被挂马 访问者屡遭木马侵害
  4. 红帽8搭建httpd
  5. 逐行分析鸿蒙系统的 JavaScript 开发框架
  6. SEO新手怎么做好网站关键词优化?
  7. 美通企业日报 | 亚马逊AWS三项举措推进量子计算技术;海航渝富重组西部航空...
  8. 关于怎么用MHDD修复硬盘坏道!
  9. (清风)数学建模:模糊分析法(二)应用
  10. 2017.07.31软件更新公告