基于Python的疫情数据爬虫及可视化

资源下载地址:https://download.csdn.net/download/sheziqiong/85620226
python 基础语法的学习

系统的学习了 python 中的循环,分支,条件和枚举等相关语法,及其 python 语言本身的特色(缩进,代码块),系统的学习了 python 的基本数据类型和相关系统内置函数的使用(基本数据类型包括字符串、数字、容器、布尔、None 五大类),以及类、面向对象的特征(init,私有变量的定义等),包、模块、函数与变量作用域的理解,pythonic 的深刻理解。函数式编程的相关概念(包括闭包等),最后学习了相关类库,为之后的爬虫开发打下了坚实的基础。在实训过程的第一周的时候,练习了 python 中多线程,和进程的相关知识点的练习和相关概念。

数据类型

Python 中的数据类型可以分为五大类:字符串、数字、容器、布尔、None。字符串可以使用单引号或者双引号,用加号将两个字符串合并。数字包括整形、浮点型和复数。容器包括:List(列表)、Tuple(元组)、Sets(集合)、Dictionary(字典)

列表可以修改,可以用于切片、增、删、改、查。元组和列表类似,但是不同的是元组不能修改,元组使用小括号。元组中的元素值是不允许修改的,但可以对元组进行连接组合。Set 是无序的集合,不能有重复的元素,也不能排序。布尔主要应用在条件判断上面,发生即为 True,未发生即为 False。Python 严格区分大小写,所以一定要注意不要写错。None 是 Python 里面特殊的空值,不能理解为 0 字典是另一种可变容器模型,且可存储任意类型对象。键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

条件语句

if 语句用来检验一个条件, 如果条件为真,我们运行一块语句(称为 if-块 ), 否则我们处理另外一块语句(称为 else-块 )。 else 从句是可选的。elif 语句可以检查多个表达式的真值,并执行一个代码块的条件之一计算结果为 true。if…elif 语句是可选的。然而不像 else,对此可以有最多一个语句,if 语句下边可以有任意数量 elif 语句。

循环语句

Python 中的循环语句有 for 和 while。break 可以用来终止当前的循环语句,即使循环没结束,执行了 break 语句这个循环就终止了,直接跳出整个循环。continue 语句是用来告诉程序跳出本次循环,然后执行下一轮循环,不同与 break,break 是跳出整个循环,continue 是结束这一次循环,继续下一次循环。

函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。在 Python 中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号 : ,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。全局变量所有作用域都可读,局部变量只能在本函数可读。函数在读取变量时,优先读取函数本身自有的局部变量,再去读全局变量。

类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响;方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据;通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节。和静态语言不同,Python 允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同

多线程火车票练习代码如下:

在这里插入图片描述

爬虫的开发及使用

在完成爬虫的过程中主要学习的知识点是,正则表达式,re 库的相关概念,包括配位符等概念,安装 MySQL 数据库,还有 beautifulsuop 库的使用,学会了分析网页结构(包括网页的分析和网页标签的使用),对于 JSON 传输方式也有了许多的了解,对于 MySQL 数据库的存取,游标的定义以及操作也有了深刻的认识,爬虫开发让我学到了许多有用的网页结构的知识,数据库的操作,相关类库的使用,类的使用和数据怎么样通过 python 的类进行存储。

  • 正则表达式
  • re.search(pattern, string, flags)扫描整个字符串,直到找到第一个匹配的对象(查找)
  • re.findall(pos[string 开始位置:string 结束位置])扫描整个字符串,找到所有匹配的对象并返回 List(查找所有)

re.sub(pattern, repl, string, count)将 pattern 替换 repl,类似文本编辑的替换,count 设置替换次数,返回替换后字符串,其中 repl 可设置为一个(替换)

基本字符类

\d 数字匹配符 digit

\D 匹配除了 0~9 的字符

\s 空格匹配符,包括\t\s\n\r\f\v

\S 匹配除了空格的字符

\w 数字 + 字符匹配符

\W 匹配除了数字或字母

\b 边界匹配符,匹配数字字母与符号的边界

\B 匹配数字字母与数字字母边界以及符号与符号边界

.万能匹配符,匹配一切除了\n 换行符

digit,space,word,boundary,数字空格字符边界,大写取反,.对一切

规则类

^ 开头符

$ 结尾符

| 或运算

+1+ 次

*0+ 次

?非贪心字符,0 和 1 次

搭配使用 *?或 +?表示非贪心,第一次匹配上就停止,0909090 用 09+?匹配到 09,09+ 则匹配到 090909

{m,n}匹配 m 到 n 次,{m,}匹配 m+,{,n}匹配 0~n 次

多重匹配

匹配括号内字符

-z]- 代表 a 到 z 的所有字符

[+*()]匹配符号时不用加\

[ab] 代表取反,不代表开头

BeautifulSoup

Beautiful Soup 提供一些简单的、python 式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。自动将输入文档转换为 Unicode 编码,输出文档转换为 utf-8 编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup 就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。已成为和 lxml、html6lib 一样出色的 python 解释器,为用户灵活地提供不同的解析策略或强劲的速度。

Beautiful Soup 将复杂 HTML 文档转换成一个复杂的树形结构,每个节点都是 Python 对象,所有对象可以归纳为 4 种:

Tag
NavigableString
BeautifulSoup
Comment
JSON

(Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于(欧洲计算机协会制定的 js 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

Python 爬虫中使用 JSON 来传输数据,JSON 在 python 中格式与字典类似。

JSON 的 dumps 方法和 loads 方法,可实现数据的序列化和反序列化。具体来说,dumps 方法,可将 JSON 格式数据序列为 Python 的相关的数据类型;loads 方法则是相反,把 python 数据类型转换为 JSON 相应的数据类型格式要求。在序列化时,中文汉字总是被转换为 unicode 码,在 dumps 函数中添加参数 ensure_ascii=False 即可解决。

MySQL 与 python 交互

插入操作可以通过游标的 execute 和 executemany 两个方法来完成。注意:只要是对数据表有修改的操作(插入、更新、删除)在使用 execute 方法后,都需要再次调用 commit 方法对数据库的修改才会最终生效。

execute 方法一次插入一条记录,executemany 一次插入多条记录

插入、更新、删除操作必须再执行 commit 操作之后才会生效,而查询操作也只有在执行 fetch 操作之后才会生效。fetch 操作包括 3 个方法,分别是 fetchone()、fetchall()、fetchmany()。

fetchall():查询指定的所有记录

fetchmany(size):查询指定数量的记录

fetchone():取出第一条记录

我在小组中的任务是完成丁香园国内数据的爬取操作

代码如下:

Flask 的安装及使用

Flask 框架的安装包括虚拟环境的搭建,以及 vscode 的相关操作及使用。

Flask 函数接收一个参数__name__,它会指向程序所在的包

app = Flask(__name__)

装饰器的作用是将路由映射到视图函数 index

@app.route('/')
def index():
    return 'Hello World'

Flask 应用程序实例的 run 方法 启动 Web 服务器

if __name__ == '__main__':
app.run()

在这里插入图片描述

可视化的编写及展示

在这个阶段,系统的学习了前端的三件套,包括 HTML,CSS,js 等,以及 echarts 框架的使用,对于前后端交互,flask 路由,AJAX 的操作,数据库的读取以及传送等操作。

ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求。遵循 Apache-2.0 开源协议,免费商用。兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari 等)及兼容多种设备,可随时随地任性展示。ECharts 提供了很多交互组件:例组件 legend、标题组件 title、视觉映射组件 visualMap、数据区域缩放组件 dataZoom、时间线组件 timeline。

jQuery

jQuery 是一个快速、简洁的 JavaScript 框架,是继 Prototype 之后又一个优秀的 JavaScript 代码库(或 JavaScript 框架)。jQuery 设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,优化 HTML 文档操作、事件处理、动画设计和 AJAX 交互。

jQuery 的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的 CSS 选择器,并且可对 CSS 选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件,jQuery 兼容各种主流浏览器。

完成折线图,饼图,柱状图展示如下,以下为柱状图的相应 js 代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MQKVJKYF-1655020783214)(https://www.writebug.com/myres/static/uploads/2022/6/11/4c4e1e704744fbfb12acc947e46d07f5.writebug)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-McFaaEvE-1655020783215)(https://www.writebug.com/myres/static/uploads/2022/6/11/316b9c45d47d6c16ce44058766d1b37e.writebug)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XcNQ2VT1-1655020783216)(https://www.writebug.com/myres/static/uploads/2022/6/11/e55a91707a59fbef3fd0d700f5abcf9e.writebug)]

实训总结

实训过程中遇到的相关问题及突破:

在安装 flask 虚拟环境时,遇到了环境变量的问题。

解决:重新安装 anaconda 这一个软件,并且在软件安装的过程中设置了全局环境变量,使得在 window 的 cmd 中能执行 conda 这个命令,并且成功的创建出虚拟环境进行相应的开发。

在 echarts 可视化搭建中,前端页面丢包,完全显示不出来。

解决:清除浏览器缓存,并且关闭浏览器代理软件,避免浏览器页面被劫持,重新刷新网页就能通过控制台成功看到相应的 js,HTML 包的加载。

vscode 软件出现 ps 无法执行 conda 命令,激活虚拟环境

解决:通过修改 vscode 中 shell 的相应设置,将 vs 控制台 powershell 转化为 cmd 控制台页面。

在可视化开发时需要解决的问题:

如何基于 VScode 进行前端开发

如何引入需要展示的图形的模板

如何修改模板按照我们所需的图形来展示

如何使用数据库存储的数据,填充模板的数据

通过系统的练习与小组成员之间的合作,最终解决以上问题,成功完成项目的开发。

资源下载地址:https://download.csdn.net/download/sheziqiong/85620226

猜你喜欢

转载自blog.csdn.net/newlw/article/details/125246382