当前位置: 首页 > 编程日记 > 正文

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

4bd033ed6b7fffcf270e62b24d226686.gif

作者 | 黄伟呢

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

1. 页面分析

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

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

0ef9781c96c344306af55709d63daad6.png

观察上图:左边展示的分别是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个编号。

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

d92013813272583094e4aaa02acb001e.png

部分截图如下

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

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

2. 数据爬取

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

db174e80c72a0178274069d1a71a32ff.png

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

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

部分截图如下:

970fdd0636a41b7a7a73dc47e4b835df.png

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)

结果如下:

‍‍‍‍‍‍‍ca4535b7f4a2eca5977f225d6cfa5100.png

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

结果如下:

be5b9b032c8ce50b722fbeba9d3259f5.png

bfde0e02daa1471a31a98fe8ea01138b.gif

资讯

谷歌使出禁用2G大招

技术

干货满满的python实战项目!

技术

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

技术

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

c8ea46f2ced66cb7bf8c9355c11bb570.png

分享

e0e7bd914a2bc80f235864c9006637cb.png

点收藏

1b6ee6973dcead79feb4b7886cd1bf27.png

点点赞

0412031f856cead6de3b765028cbb9b3.png

点在看

相关文章:

蹭了BCH热度,还来诋毁BCH,这些跳梁小丑到底在玩什么阴谋?

最近一些分叉币为了博眼球简直什么招数都用。有的某分叉币对主链暂停10天的问题闭口不提,靠微博撕逼来吸引关注,有的则自导自演了一出51%***的大戏。而奇怪的是当别人开始谈论他们这些错误的时候,他们却把矛头指向了火热的比特币现金。这些跳…

比 GPT-3 更擅长理解用户意图,OpenAI发布 InstructGPT

作者 | 青苹果来源 | 数据实战派近日,OpenAI 发布了一项令人瞩目的研究—— InstructGPT。在这项研究中,相比 GPT-3 而言,OpenAI 采用对齐研究(alignment research),训练出更真实、更无害,而且更…

The C10K problem原文翻译

原文地址:http://www.cnblogs.com/fll/archive/2008/05/17/1201540.htmlThe C10K problem如今的web服务器需要同时处理一万个以上的客户端了,难道不是吗?毕竟如今的网络是个big place了。 现在的计算机也很强大了,你只需要花大概$…

mysql中模糊查询的四种用法介绍

下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。 比如 SELECT * FROM [user] WHERE u_name LIKE …

spring data jpa 详解

2019独角兽企业重金招聘Python工程师标准>>> 本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring整…

php使用curl可以get 模拟post

本机windows测试需要打开curl php.ini extensionphp_curl.dll重启apacheinclude (Curl.php);$cunew QP_Curl_Curl();$s$cu->get(http://www.baidu.com);echo $s;Curl.php可以使用http://www.myquickphp.com/的框架中的组件Curl.php/*** CURL 工具* * category QuickPHP(II…

为什么使用模块?

# -*- coding: utf-8 -*- #python 27 #xiaodeng #模块01#每个文件都是一个模块,并且模块导入之后就可以导入模块定义的变量名。#为什么使用模块? #命名空间提供了将部件组织为系统的简单的方法。 #在一个模块文件的顶层定义的所有变量名都成了被导入的模…

报告!插件×元宵来啦

欢欢喜喜 闹元宵迈过新年,开工大吉,元宵节的脚步悄悄靠近,在大家努力搬砖得同时,CSDN插件带着它的元宵活动走来啦~元宵喜乐汇虎年的第一个月圆之夜,除了吃汤圆还能干啥呢?当然是猜灯谜咯!CSDN插…

%f%g%e区别

%f 表示按浮点数的格式输出 %e 表示按指数形式的浮点数的格式输出 %g 表示自动选择合适的表示法输出,可以去小数末尾多余的0转载于:https://www.cnblogs.com/holyday/p/9111777.html

Cassandra安装测试

说明,本人成功安装过程记录 只要看解压目录的readme.txt即可,其他网上教程由于版本不对会执行报错,例如遇到编码问题 #wget http://www.apache.org/dyn/closer.cgi?path/cassandra/1.0.3/apache-cassandra-1.0.3-bin.tar.gz #tar -zxvf a…

如何使用 Python 隐藏图像中的数据

作者 | 小白来源 | 小白学视觉隐写术是在任何文件中隐藏秘密数据的艺术。秘密数据可以是任何格式的数据,如文本甚至文件。简而言之,隐写术的主要目的是隐藏任何文件(通常是图像、音频或视频)中的预期信息,而不实际改变…

php 的 危 险 参 数

hpinfo() 功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。 危险等级:中 passthru() 功能描述:允许执行一个外部程序并回显输出,类似于 exec()。 危险等级:高 exec() 功能描述:允许执行一个外部…

开源 | 蚂蚁金服分布式中间件开源第二弹:丰富微服务架构体系

小蚂蚁说: 数据、消息、微服务是蚂蚁金服自主研发的金融级分布式中间件 SOFA (Scalable Open Financial Architecture)的三大方向。 一个多月前,蚂蚁金服开源了 SOFABoot 和 SOFARPC 两个组件,受到了社区的热烈欢迎&am…

System.Web.Caching.Cache类 缓存 各种缓存依赖

原文:System.Web.Caching.Cache类 缓存 各种缓存依赖Cache类,是一个用于缓存常用信息的类。HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例。 一、属性 属性说明Count获取存储在缓存中的项数。EffectivePercentagePhysicalMemoryLimit获取在 ASP.NE…

Python 可视化近 90 天的百度搜索指数 + 词云图

作者 | 叶庭云来源 | AI庭云君一、简介 在实际业务中我们可能会使用爬虫根据关键词获取百度搜索指数历史数据,然后进行对应的数据分析。百度指数,体验大数据之美。但要获取百度指数相关的数据,困难如下:不是静态网页,并…

php常用比较函数区别表

php常用比较函数区别表 表达式 empty() is_null() isset() if($x) $x "" TRUE FALSE TRUE FALSE $x null TRUE TRUE FALSE FALSE $x is undefined TRUE TRUE FALSE FALSE(报E_NOTICE错) $x array() TRUE FALSE TRUE FALSE $x false TRUE FALSE TRUE FALSE $x 0 …

实战分享:淘宝Web 3D应用与游戏开发

大家下午好!我们今天讲个比较有意思的话题,这个话题在业界被谈及得比较少。大家在座有做过移动端开发的同学吗?请举个手,人还挺多的。那做过3D应用的同学请举个手,有用过Threejs的请举个手,做过游戏的呢..人…

常见NoSQL系统使用场景分析

•Cassandra •特性:分布式与复制的权衡\根据列和键范围进行查询\BigTable类似的功能:列,列族\写比读快很多 •最佳适用:写操作较多,读比较少的时候。如果你的系统都是基于Java的时候。 •应用场景:银行&am…

再一次输给了AI,弯道急速超车、登上 Nature 封面

作者 | 学术头条来源 | 学术头条人工智能(AI)的很多潜在应用,涉及与人类交互时做出更优化的实时决策,而竞技或者博弈类游戏,便是最佳的展示舞台。近日,发表在《自然》杂志上的封面文章报告称,AI…

maven 多环境打包

2019独角兽企业重金招聘Python工程师标准>>> 1.在项目的pom中添加 <build><resources><!-- Resource Filter --><resource><directory>src/main/resources</directory><filtering>true</filtering></resource&g…

Sass函数:Sass Maps的函数-map-has-key($map,$key)

map-has-key($map,$key) 函数将返回一个布尔值。当 $map 中有这个 $key&#xff0c;则函数返回 true&#xff0c;否则返回 false。 前面的示例&#xff0c;当 $key 不在 $map 中时&#xff0c;使用 map-get($map,$key) 函数将返回一个 null 值。但对于开发人员&#xff0c;并看…

Memcache内存分配策略

转自&#xff1a;http://tank.blogs.tkiicpp.com/2010/12/14/memcache%e5%86%85%e5%ad%98%e5%88%86%e9%85%8d%e7%ad%96%e7%95%a5/ 一、Memcache内存分配机制关于这个机制网上有很多解释的&#xff0c;我个人的总结如下。 Page为内存分配的最小单位。 Memcached的内存分配以page…

论排列组合,持续更新

今天刚好碰到了一个排列组合问题&#xff0c;因为之前对这方面的学习比较少&#xff0c;所以用的非常蠢的方法做了四位数中取三位的排列&#xff0c;写的程序太有局限性&#xff0c;源码如下#define _CRT_SECURE_NO_WORNINGS 1#include<stdio.h>#include<stdlib.h>…

Python 中少为人知的 10 个安全陷阱

作者&#xff1a;Dennis Brinkrolf译者&#xff1a;豌豆花下猫Python猫原题&#xff1a;10 Unknown Security Pitfalls for Python英文&#xff1a;https://blog.sonarsource.com/10-unknown-security-pitfalls-for-pythonPython 开发者们在使用标准库和通用框架时&#xff0c;…

JS+CSS3 360度全景图插件 - Watch3D.js

日常闲扯 从上一篇文章到这篇中间快过了一年了&#xff0c;时间真滴过得快。不是在下中间没想过写新的文章&#xff0c;而是自己确实变懒了(体重1 1 1 1....) 。。OTL。。。不过到最后觉得还是需要写点东西&#xff0c;不然人就真废了&#xff0c;于是便有了这样一个插件&#…

CQRS学习——最小单元的Cqrs(CommandEvent)[其一]

【说明&#xff1a;博主采用边写边思考的方式完成这一系列的博客&#xff0c;所以代码以附件为准&#xff0c;文中代码仅为了说明。】 结构 在学习和实现CQRS的过程中&#xff0c;首要参考的项目是这个【http://www.cnblogs.com/yangecnu/p/Introduction-CQRS.html】。所以Dpfb…

PHP APC安装与使用

最简单的方法&#xff0c;找到php安装目录的pecl 自动安装&#xff1a; # /usr/local/php/bin/pecl install apc 下面按提示一步步完成即可 配置/etc/php.ini 末尾加入extensionapc.so 手动安装&#xff1a; 官网 http://cn2.php.net/manual/zh/book.apc.php 下载http://p…

AIphaCode 并不能取代程序员,而是开发者的工具

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; DeepMind 是 AI 研究实验室&#xff0c;它引入了一种深度学习模型&#xff0c;可以生成具有显著效果的软件源代码。该模型名为 AIphaCode&#xff0c;是基于 Transformers&#xff0c;OpenAI 在其代码生…

源码阅读:SDWebImage(六)——SDWebImageCoderHelper

该文章阅读的SDWebImage的版本为4.3.3。 这个类提供了四个方法&#xff0c;这四个方法可分为两类&#xff0c;一类是动图处理&#xff0c;一类是图像方向处理。 1.私有函数 先来看一下这个类里的两个函数 /**这个函数是计算两个整数a和b的最大公约数*/ static NSUInteger gcd(N…

基于 OpenCV 的网络实时视频流传输

作者 | 努比来源 | 小白学视觉大多数人会选择使用IP摄像机&#xff08;Internet协议摄像机&#xff09;而不是CCTV&#xff08;闭路电视&#xff09;&#xff0c;因为它们具有更高的分辨率并降低了布线成本。在本文中&#xff0c;我们将重点介绍IP摄像机。IP摄像机是一种数字 摄…