作者 | 黄伟呢

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

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

结果如下:

资讯

谷歌使出禁用2G大招

技术

干货满满的python实战项目!

技术

Python写了一个网页版的P图软件

技术

11款可替代top命令的工具!

分享

点收藏

点点赞

点在看

详解 Python 如何将爬取到的数据分别存储到 txt、excel、mysql 中!相关推荐

  1. python手机壁纸超清_详解Python静态网页爬取获取高清壁纸

    前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...

  2. python壁纸高清图片_详解Python静态网页爬取获取高清壁纸

    前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...

  3. scrapy爬虫储存到mysql_详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库

    获取要爬取的URL 爬虫前期工作 用Pycharm打开项目开始写爬虫文件 字段文件items # Define here the models for your scraped items # # S ...

  4. python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析

    这篇文章主要介绍了python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析的实例,帮助大家更好的理解和学习使用python.感兴趣的朋友可以了解下 一.环境准备 python3.8.3 ...

  5. AJAX教程美食滤镜,Python爬虫实例——爬取美团美食数据

    1.分析美团美食网页的url参数构成 1)搜索要点 美团美食,地址:北京,搜索关键词:火锅 2)爬取的url https://bj.meituan.com/s/%E7%81%AB%E9%94%85/ ...

  6. Python从网络接口爬取json天气预报数据绘制高温低温双折线图

    Python从网络接口爬取json天气预报数据绘制高温低温双折线图 实现一个功能,从网络上的天气预报接口读取天气预报中的json数据,json数据中包含高温和低温以及日期,然后把日期作为横坐标,高温和 ...

  7. 对爬虫爬取到的数据进行存储

    已写章节 第一章 网络爬虫入门 第二章 基本库的使用 第三章 解析库的使用 第四章 数据存储 第五章 动态网页的抓取 文章目录 已写章节 第四章 数据存储 4.1 文件存储 4.1.1 TXT文件存储 ...

  8. Python爬虫:爬取喜马拉雅音频数据详解

    前言 喜马拉雅是专业的音频分享平台,汇集了有声小说,有声读物,有声书,FM电台,儿童睡前故事,相声小品,鬼故事等数亿条音频,我最喜欢听民间故事和德云社相声集,你呢? 今天带大家爬取喜马拉雅音频数据,一 ...

  9. Windows下利用python+selenium+firefox爬取动态网页数据(爬取东方财富网指数行情数据)

    由于之前用urlib和request发现只能获取静态网页数据,目前爬取动态网页有两种方法, (1)分析页面请求 (2)Selenium模拟浏览器行为(霸王硬上弓),本文讲的就是此方法 一.安装sele ...

最新文章

  1. 14. 变更管理(Change Management)
  2. iOS Ruby出现问题,导致无法安装Pod
  3. java设计模式0--设计模式简介
  4. 一个仿沙漏效果的自定义view(贝瑟尔曲线实现)
  5. Centos7装NVIDIA显卡驱动(GPU)
  6. 基于EasyUI的Web应用程序及过去一年的总结
  7. ECS之Component组件
  8. 1.22 OSS旧IP下线公告
  9. 输入字符串按照单词逆序输出
  10. 小微风控之财务评分模型的制定与应用
  11. 航飞影像的GPS坐标导出、修改、写入(EXIF信息)
  12. 咳血的独角兽5——挥向投资人的镰刀
  13. 提高APP冷启动速度小结
  14. ios 高德获取定位_更新日志-iOS 定位SDK | 高德地图API
  15. MPAndroidchart自定义样式二在柱状图上显示文本和间断式显示柱状图
  16. 毕业设计-基于SSM医院信息管理系统
  17. 【NIPS 2016图神经网络论文解读】Variational Graph Auto-Encoders (VGAE) 基于VAE的图变分自编码器
  18. Vscode c与c++编译环境配置(.vscode),看这一篇就够了
  19. 一周Spring Boot + VUE 入门(2) --VUE
  20. python cookbook 豆瓣_学习python求推荐一波书籍?

热门文章

  1. Java入门—输入输出流
  2. apache性能测试工具ab使用详解
  3. AngularJS2 + ASP.NET MVC项目
  4. 【Struts2学习笔记(1)】Struts2中Action名称的搜索顺序和多个Action共享一个视图--全局result配置...
  5. [原] Jenkins Android 自动打包配置
  6. SMS系列之六:利用SMS实现操作系统的补丁分发
  7. Spring Cloud JWT文件生成
  8. Mysql隐藏命令_mysql常用命令整理
  9. 特斯拉研究报告:产品、工厂、技术、生态展望
  10. java中产生指定范围内的随机数