爬虫项目(三)---采集最近一日全国各省疫情数据

该内容出自黑马程序员教程

采集最近一日全国各省疫情数据

当然,数据来源仍然是丁香园新型冠状病毒肺炎疫情实时动态首页
url:https://ncov.dxy.cn/ncovh5/view/pneumonia

思路:首先需要先确定全国各省疫情数据的位置

在这里插入图片描述
全国各省份的疫情数据信息都在id="getAreaStat"

步骤:

  1. 发送请求,获取疫情首页内容
  2. 解析疫情首页内容,获取最近一日各省疫情信息
  3. 以json格式保存疫情信息
import requests
import re
import json
from bs4 import BeautifulSoup
from tqdm import tqdm#进度条class CoronaSpider(object):def __init__(self):self.home_url = 'https://ncov.dxy.cn/ncovh5/view/pneumonia'def get_content_from_url(self,url):#根据URL获取响应内容的字符串数据#URL:请求的URL#返回:响应内容的字符串response = requests.get(url)return response.content.decode()def parse_home_page(self,home_page): #解析首页内容,获取解析后的Python数据#home_page:首页内容#返回:解析后的Python类型数据#2,从疫情首页提取最近一日各国疫情数据soup = BeautifulSoup(home_page,'lxml')script = soup.find(id='getListByCountryTypeService2true')text = script.text#print(text)#3,从疫情数据中获取json格式的字符串json_str = re.findall(r'\[.+\]',text)[0]#由于中括号是个特殊的字符,需要在前面加个转义符;最后的结果会存在列表中,故使用[0]来获取完整json格式#print(json_str)#4,把json格式的字符串转换为Python类型data = json.loads(json_str)#print(last_day_nature_num)return datadef save(self,data,path):#5,以json格式保存最近一日各国疫情数据with open(path,'w') as fp:json.dump(data,fp)#,ensure_ascii=Falsec'''def save(self,data):#5,以json格式保存最近一日各国疫情数据with open('yy1.json','w') as fp:json.dump(data,fp)#,ensure_ascii=False'''def crawl_last_day_corona_virus(self):#采集最近一天各国疫情信息#1,发送请求,获取首页内容home_page = self.get_content_from_url(self.home_url)#2,解析首页内容,获取最近一天的各国疫情数据last_data_corona_virus = self.parse_home_page(home_page)#3,保存数据self.save(last_data_corona_virus,'E:\Jupyter_workspace\study\python\爬虫\last_day_nature_num111.json')def crawl_corona_virus(self):#采集从01月23号以来的世界各国疫情数据#1,加载最近一日各国疫情数据#with open('yy1.json') as fp:with open('E:\Jupyter_workspace\study\python\爬虫\last_day_nature_num111.json') as fp:last_day_corona_virus = json.load(fp)#print(last_day_corona_virus)#定义列表,用于存储各国从1月23号以来的疫情数据corona_virus = []#2,遍历各国疫情数据,获取从01月23号以来的世界各国疫情的URLfor country in tqdm(last_day_corona_virus,'获取从01月23号以来的世界各国疫情信息'):statustics_data_url = country['statisticsData']#3,发送请求,获取从01月23号以来的世界各国疫情的json字符串statustics_data_json_str = self.get_content_from_url(statustics_data_url)#4,解析各个国家疫情的json字符串,转化为Python类型数据,添加到列表中statustics_data = json.loads(statustics_data_json_str)['data']#print(statustics_data)for one_day in statustics_data:#statustics_data这个数据里面没有国家的一些信息,需要补充上去one_day['provinceName'] = country['provinceName']one_day['countryShortCode'] = country['countryShortCode']#print(statustics_data)corona_virus.extend(statustics_data)#把每个国家的疫情信息statustics_data,都添加到一个大的corona_virus列表里面#5,将该列表以json格式保存从01月23号以来的世界各国疫情数据信息self.save(corona_virus,'E:\Jupyter_workspace\study\python\爬虫\corona_virus.json')def craw_last_day_corona_virus_of_china(self):#采集最近一日国内各省疫情数据#1,发送请求,获取疫情首页信息home_page = self.get_content_from_url(self.home_url)#2,解析疫情首页信息,获取最近一日各省疫情数据soup = BeautifulSoup(home_page,'lxml')script = soup.find(id='getAreaStat')text = script.text#print(text)#从疫情数据中获取json格式的字符串json_str = re.findall(r'\[.+\]',text)[0]#由于中括号是个特殊的字符,需要在前面加个转义符;最后的结果会存在列表中,故使用[0]来获取完整json格式#print(json_str)#把json格式的字符串转换为Python类型data = json.loads(json_str)#print(last_day_nature_num)#3,保存疫情数据self.save(data,'E:\Jupyter_workspace\study\python\爬虫\craw_last_day_corona_virus_of_china.json')def run(self):#self.crawl_last_day_corona_virus()#self.crawl_corona_virus()self.craw_last_day_corona_virus_of_china()if  __name__ == '__main__':spider = CoronaSpider()spider.run()

很显然,这里的craw_last_day_corona_virus_of_china和parse_home_page有的步骤是相同的,接下来开始代码的重构进行优化

import requests
import re
import json
from bs4 import BeautifulSoup
from tqdm import tqdm#进度条class CoronaSpider(object):def __init__(self):self.home_url = 'https://ncov.dxy.cn/ncovh5/view/pneumonia'def get_content_from_url(self,url):#根据URL获取响应内容的字符串数据#URL:请求的URL#返回:响应内容的字符串response = requests.get(url)return response.content.decode()def parse_home_page(self,home_page,tag_id): #解析首页内容,获取解析后的Python数据#home_page:首页内容#返回:解析后的Python类型数据#2,从疫情首页提取最近一日各国疫情数据soup = BeautifulSoup(home_page,'lxml')script = soup.find(id=tag_id)text = script.text#print(text)#3,从疫情数据中获取json格式的字符串json_str = re.findall(r'\[.+\]',text)[0]#由于中括号是个特殊的字符,需要在前面加个转义符;最后的结果会存在列表中,故使用[0]来获取完整json格式#print(json_str)#4,把json格式的字符串转换为Python类型data = json.loads(json_str)#print(last_day_nature_num)return datadef save(self,data,path):#5,以json格式保存最近一日各国疫情数据with open(path,'w') as fp:json.dump(data,fp)#,ensure_ascii=Falsec'''def save(self,data):#5,以json格式保存最近一日各国疫情数据with open('yy1.json','w') as fp:json.dump(data,fp)#,ensure_ascii=False'''def crawl_last_day_corona_virus(self):#采集最近一天各国疫情信息#1,发送请求,获取首页内容home_page = self.get_content_from_url(self.home_url)#2,解析首页内容,获取最近一天的各国疫情数据last_data_corona_virus = self.parse_home_page(home_page,tag_id='getListByCountryTypeService2true')#3,保存数据self.save(last_data_corona_virus,'E:\Jupyter_workspace\study\python\爬虫\last_day_nature_num111.json')def crawl_corona_virus(self):#采集从01月23号以来的世界各国疫情数据#1,加载最近一日各国疫情数据#with open('yy1.json') as fp:with open('E:\Jupyter_workspace\study\python\爬虫\last_day_nature_num111.json') as fp:last_day_corona_virus = json.load(fp)#print(last_day_corona_virus)#定义列表,用于存储各国从1月23号以来的疫情数据corona_virus = []#2,遍历各国疫情数据,获取从01月23号以来的世界各国疫情的URLfor country in tqdm(last_day_corona_virus,'获取从01月23号以来的世界各国疫情信息'):statustics_data_url = country['statisticsData']#3,发送请求,获取从01月23号以来的世界各国疫情的json字符串statustics_data_json_str = self.get_content_from_url(statustics_data_url)#4,解析各个国家疫情的json字符串,转化为Python类型数据,添加到列表中statustics_data = json.loads(statustics_data_json_str)['data']#print(statustics_data)for one_day in statustics_data:#statustics_data这个数据里面没有国家的一些信息,需要补充上去one_day['provinceName'] = country['provinceName']one_day['countryShortCode'] = country['countryShortCode']#print(statustics_data)corona_virus.extend(statustics_data)#把每个国家的疫情信息statustics_data,都添加到一个大的corona_virus列表里面#5,将该列表以json格式保存从01月23号以来的世界各国疫情数据信息self.save(corona_virus,'E:\Jupyter_workspace\study\python\爬虫\corona_virus.json')def craw_last_day_corona_virus_of_china(self):#采集最近一日国内各省疫情数据#1,发送请求,获取疫情首页信息home_page = self.get_content_from_url(self.home_url)craw_last_day_corona_virus_of_china = self.parse_home_page(home_page,tag_id='getAreaStat')'''#2,解析疫情首页信息,获取最近一日各省疫情数据soup = BeautifulSoup(home_page,'lxml')script = soup.find(id='getAreaStat')text = script.text#print(text)#从疫情数据中获取json格式的字符串json_str = re.findall(r'\[.+\]',text)[0]#由于中括号是个特殊的字符,需要在前面加个转义符;最后的结果会存在列表中,故使用[0]来获取完整json格式#print(json_str)#把json格式的字符串转换为Python类型data = json.loads(json_str)#print(last_day_nature_num)'''#3,保存疫情数据self.save(craw_last_day_corona_virus_of_china,'E:\Jupyter_workspace\study\python\爬虫\craw_last_day_corona_virus_of_china.json')def run(self):#self.crawl_last_day_corona_virus()#self.crawl_corona_virus()self.craw_last_day_corona_virus_of_china()if  __name__ == '__main__':spider = CoronaSpider()spider.run()

raw_last_day_corona_virus_of_china.json文件内容如下:
在这里插入图片描述
这里的编码格式没有改变,故各个国家的汉字名称没有出现
在这里插入图片描述
https://file1.dxycdn.com/2020/0223/331/3398299755968040033-135.json该json文件中存放着全国各个省的疫情数据信息。
爬虫项目(四)中会用到该信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机专业博士后排名,排名丨计算机专业领域TOP10,性价比超高!

原标题:排名丨计算机专业领域TOP10,性价比超高!相信各位家长、同学已经看过太多专业的排名,我问过很多理科生将来想学什么专业,听到频率最高的还是计算机专业。似乎大家都知道,学计算机是比较挣钱的&#x…

js 命名规范

转载于:https://www.cnblogs.com/zjx2011/p/3165043.html

爬虫项目(四)---采集从01月22日以来全国各省疫情数据

采集从03月02日以来全国各省疫情数据 当然,数据来源仍然是丁香园新型冠状病毒肺炎疫情实时动态首页 url:https://ncov.dxy.cn/ncovh5/view/pneumonia 分析 确定01月22日以来全国各省疫情数据的URL 由项目(三)可以获取全国各省疫情数据点击可下载&…

纠错码trick和数据压缩trick

纠错码和压缩算法是同一枚硬币的两面。 两者都来自于对冗余的想法。 纠错码被视为向消息或文件中添加冗余的原则性方法。而压缩算法正好相反,他们会从消息或文件中移除冗余。 压缩和纠错并不是彼此抵消的,相反,好的压缩算法会移除抵消冗余&am…

常用算法总结(穷举法、贪心算法、递归与分治算法、回溯算法、数值概率算法)

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 目录1、穷举法2、贪心算法3、递归与分治算法4、回溯算法5、数值概率算法1、穷举法…

工程师英语和计算机证书查询,点击进入国家硬件维修工程师证书查询网站

工程师证书查询网站人力资源社会保障部指定查询国家职业资格证书的唯一官方网站。涵盖全国各省市、各行业、各央企颁发的证书。电脑硬件维修工程师网上能查看国家工信部硬件维修工程师证书查询网址:http://www.ceiaec.org/index.htm工程师证书编号在网上怎么查询如果…

敏捷开发“松结对编程”系列之七:问题集之一

本文是“松结对编程”系列的第七篇。(之一,之二,之三,之四,之五,之六,之七,之八)刚刚参加完MPD 2011深圳站,在演讲中间及后来媒体采访,被问到了一…

C++中的sort函数对二维数组排序是按照什么准则?

遇到的一个疑惑&#xff0c;现记录如下&#xff1a; int main() {vector<vector<int>> envelopes { {5, 8},{6, 7},{6, 4},{2, 3},{8,9} };sort(envelopes.begin(), envelopes.end());for (int i 0;i < envelopes.size();i)cout << envelopes[i][0]<…

数学专业学计算机哪一行,计算数学

计算数学(一个理科专业)语音编辑锁定讨论上传视频计算数学是由数学、物理学、计算机科学、运筹学与控制科学等学科交叉渗透而形成的一个理科专业。中文名计算数学外文名Computational Mathematics所 属数学计算数学专业定义编辑语音计算数学也叫做数值计算方法或数值分析。主…

图片透视变换操作

由于照相机硬件设备本身的误差&#xff0c;可能会导致镜头畸变&#xff0c;从而导致照相机拍摄到的照片产生失真现象&#xff0c;此时可以通过透视变换去适当的校正。 大概的思路&#xff1a;在原图像上确定四个点&#xff0c;然后再新图像上也确定四个点&#xff0c;通过warp…

dp笔记:关于DP算法和滚动数组优化的思考

从网上总结了一些dp的套路以及对滚动数组的一些思考&#xff0c;现记录如下&#xff0c;希望以后回顾此类算法时会有所帮助。 目录1、DP算法经验1、DP算法核心&#xff1a;2、DP算法类别以及例题例1&#xff1a;三步问题例2&#xff1a;最小路径和例3&#xff1a;乘积最大子数组…

【C++ grammar】引用

1、引用就是另一个变量的别名 2、通过引用所做的读写操作实际上是作用与原变量上 引用方式&#xff1a; int x; int & rxx; or int x, &rxx;在C中&是取地址&#xff0c;在C中&放在一个变量的定义前&#xff0c;那就是引用 注意&#xff1a; 这种引用是错误的…

flash安全策略的理解

flash安全策略的理解 2011-06-25 01:48 11人阅读 评论(0) 收藏 举报 一直以来对flash的安全策略是一头雾水&#xff0c;什么安全沙箱&#xff0c;跨域策略文件一堆东西乱七八糟&#xff0c;搞不清楚。不过纠结到现在已经基本上理解了。 flash的安全问题在官方手册上有足够的解…

【C++ grammar】nullptr and Dynamic Memory Allocation (空指针和动态内存分配)

空指针 1.1. 0带来的二义性问题 C03中&#xff0c;空指针使用“0”来表示。0既是一个常量整数&#xff0c;也是一个常量空指针。C语言中&#xff0c;空指针使用(void *)0来表示有时候&#xff0c;用“NULL”来表示空指针(一种可能的实现方式是#define NULL 0) 1.2. C标准化委…

No module named ‘skimage.metrics‘在Anaconda3中的解决方法

1&#xff0c;进入Anaconda Prompt 2&#xff0c;进行安装&#xff1a; pip install scikit-image 3&#xff0c;若还是报错&#xff0c;尝试进行更新一下 pip install scikit-image --upgrade

【C++ grammar】数据类型转换、列表初始化

布尔类型 C语言在其标准化过程中引入了bool、true和false关键字&#xff0c;增加了原生数据类型来支持布尔数据。 布尔类型的大小&#xff08;所占的存储空间&#xff09;依赖于具体的编译器实现。也可以用 sizeof运算符得到其占用的空间 Conversion between bool and int 0…

Python对自定义离散点进行指定多项式函数拟合

自定义离散点进行指定多项式函数拟合 用户自己自己输入坐标点&#xff0c;拟合函数可根据用户输入的多项式的最高次方进行自动拟合函数&#xff0c;拟合方法采用最小二乘法进行函数拟合。 (1,2),(2,5),(3,10),(4,17),(5,26),(6,37)(7,50),(8,65),(9,82) 很显然是函数为二次函…

【C++ grammar】C++简化内存模型

1、stack&#xff08;栈&#xff09; 编译器自动分配内存&#xff08;函数内部定义得局部变量、形参&#xff09; 2、堆&#xff08;Heap&#xff09; 一般由程序员分配释放&#xff0c;若程序员不释放&#xff0c;程序结束时可能由OS回收&#xff08;new和delete&#xff09; …

Effect of Diethylene Glycol on the Inkjet Printability of Reactive Dye Solution for Cotton Fabrics.

Effect of Diethylene Glycol on the Inkjet Printability of Reactive Dye Solution for Cotton Fabrics 二乙二醇对棉织物活性染料溶液喷墨印刷性能的影响 Diethylene Glycol 二乙二醇 Inkjet Printability 喷墨印刷性能 Reactive Dye Solution 活性染料溶液 Cotton Fabric…

Silverlight4.0教程之使用CompositeTransform复合变形特效实现倒影

微软于PDC2009上发布Silverlight 4 Beta版&#xff0c;微软在Silverlight 4版本中处理了约8000个的Silverlight终端用户的请求&#xff0c;加入了一系列另开发人员兴奋的新特性&#xff0c;最突出的主要体现在几个方面&#xff1a; 开发工具增强&#xff1a;Visual Studio 2010…