采集从03月02日以来全国各省疫情数据

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

分析

确定01月22日以来全国各省疫情数据的URL
由项目(三)可以获取全国各省疫情数据点击可下载:https://file1.dxycdn.com/2020/0223/331/3398299755968040033-135.json

思路

1,采集从01月23日以来全国各省疫情数据

  • 加载最近一日全国疫情信息
  • 遍历最近一日全国疫情信息,获取各省疫情URL
  • 发送请求,获取各省疫情json字符串
  • 解析各省疫情json字符串,并添加到列表中
  • 以json格式保存疫情信息

2, 代码重构

  • 抽取重复的代码到新方法中,提高代码复用
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 parse_corona_virus(self,last_day_corona_virus_of_china,desc):#定义列表,用于存储各国从1月23号以来的疫情数据corona_virus = []#2,遍历各国疫情数据,获取从01月22号以来的世界各国疫情的URLfor country in tqdm(last_day_corona_virus_of_china,desc):#发送请求,获取各省疫情json字符串statustics_data_url = country['statisticsData']statustics_data_json_str = self.get_content_from_url(statustics_data_url)#4,解析各省疫情json字符串,并添加到列表中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']if country.get('countryShortCode'):one_day['countryShortCode'] = country['countryShortCode']#print(statustics_data)corona_virus.extend(statustics_data)#把每个国家的疫情信息statustics_data,都添加到一个大的corona_virus列表里面#print(corona_virus)return corona_virusdef load(self,path):#根据路径加载数据with open(path) as fp:#'E:\Jupyter_workspace\study\python\爬虫\craw_last_day_corona_virus_of_china.json'data = json.load(fp)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:last_day_corona_virus = self.load('E:\Jupyter_workspace\study\python\爬虫\last_day_nature_num.json')#print(last_day_corona_virus)#定义列表,用于存储各国从1月23号以来的疫情数据corona_virus = self.parse_corona_virus(last_day_corona_virus,desc='获取从01月23号以来的世界各国疫情信息')'''corona_virus = []#2,遍历各国疫情数据,获取从01月23号以来的世界各国疫情的URLfor country in tqdm(last_day_corona_virus,''):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 crawl_corona_virus_of_china(self):#采集从01月22日以来的全国各省的疫情数据#加载最近一日全国疫情信息#with open('E:\Jupyter_workspace\study\python\爬虫\craw_last_day_corona_virus_of_china.json') as fp:last_day_corona_virus_of_china = self.load('E:\Jupyter_workspace\study\python\爬虫\craw_last_day_corona_virus_of_china.json')#遍历最近一日全国疫情信息,获取各省疫情URLcorona_virus = self.parse_corona_virus(last_day_corona_virus_of_china,'采集01月22号以来各省疫情信息')#以json格式保存疫情信息self.save(corona_virus,'E:\Jupyter_workspace\study\python\爬虫\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()self.crawl_corona_virus_of_china()if  __name__ == '__main__':spider = CoronaSpider()spider.run()

由前面的四个爬虫项目可以得出总结:
1,每个爬虫任务都是由发送请求,获取响应,解析数据,保存数据三部分组成
2,发送请求,获取响应的代码和保存数据的代码可以提取出来,提高代码的复用性和可维护性
3,如果访问的是相似的结构网页,解析数据代码也可以进行提取出来,提高代码的复用性和可维护性
4,每一个功能封装成一个方法,方便扩展和维护

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

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

    该内容出自黑马程序员教程 采集最近一日全国各省疫情数据 当然,数据来源仍然是丁香园新型冠状病毒肺炎疫情实时动态首页 url:https://ncov.dxy.cn/ncovh5/view/pneumo ...

  2. 爬虫项目(二)---采集从03月02号以来的世界各国疫情数据

    该内容出自黑马程序员教程 采集从03月02号以来的世界各国疫情数据 步骤: Ⅰ,重构项目(一)的代码,以提高扩展性 把功能封装到一个类中 每一个小功能变成一个方法 通过run方法启动爬虫 import ...

  3. 【01月22日】A股滚动市盈率PE最低排名

    深康佳A(SZ000016) - 滚动市盈率PE:1.55 - 滚动市净率PB:1.03 - 滚动年化股息收益率:4.71% - - - 深康佳A(SZ000016)的历史市盈率走势图 华菱钢铁(SZ ...

  4. 新神魔大陆服务器现在在维护吗,新神魔大陆1月22日合服维护公告

    新神魔大陆1月22日合服维护公告.为了给勇士提供更好更全面的游戏体验,享受到更多游戏的乐趣,结识更多的朋友,新神魔大陆官方将安排游戏服务器合服.接下来就和小编一起来看看这次合服的详细信息. 新神魔大陆 ...

  5. 剑侠情缘服务器显示维护,剑侠情缘手游8月22日部分服务器数据回档停服维护

    亲爱的少侠: 各位少侠,因独孤剑疏于管理,名望商店于8月21日出现异常,已于当日22时停店整顿,同时4级技能书使用及摆摊上架功能暂时关闭.由此给您带来的不便,我们深表歉意. 此次名望商店异常事件中,部 ...

  6. 哈啰顺风车将于2月22日全国上线

    新浪科技讯 北京时间2月21日上午消息,根据哈啰出行在App Store更新信息,哈啰顺风车将于2月22日在全国上线.今年年1月底,哈啰出行宣布在上海.广州.杭州.成都.合肥.东莞6座城市上线试运营顺 ...

  7. 服务器维护回档多久,8月22日部分服务器数据回档停服维护公告

    亲爱的少侠: 各位少侠,因独孤剑疏于管理,名望商店于8月21日出现异常,已于当日22时停店整顿,同时4级技能书使用及摆摊上架功能暂时关闭.由此给您带来的不便,我们深表歉意. 此次名望商店异常事件中,部 ...

  8. 7月22日第壹简报,星期五,农历六月廿四

    7月22日第壹简报,星期五,农历六月廿四 1. <2022赛迪百强县榜单>发布:榜单前列依然由江苏和浙江两省霸榜,揽下了前二十强中的14席. 2. 比亚迪宣布进入日本市场,三款车型2023 ...

  9. 发售预告:7月22日“大暑”发售,【传统国风廿四节气】夏季发售完毕。

    大暑,是二十四节气中的第十二个节气,也是夏季最后一个节气.斗指未,太阳黄经为120°,于公历7月22-24日交节."暑"是炎热的意思,大暑,指炎热之极.大暑相对小暑,更加炎热,是一 ...

最新文章

  1. 脚本升级_Openssh升级脚本
  2. 判断Java 对象实例是否死亡
  3. Zabbix监控,详细部署
  4. 手机端网站测试用什么软件,3款优秀的移动webAPP网站在线测试工具推荐
  5. linux 32位平台,文件大小受限于2G的解决方法
  6. discuz! X3 更改域名全程记录 (修改域名的方法)
  7. POJ 3262 Protecting the Flowers 贪心(性价比)
  8. ORA-06575: 程序包或函数 NO_VM_DROP_PROC 处于无效状态
  9. Java使用Executor执行Callable任务时的几种方法
  10. [转贴] 刷机利器 Rom Manager 的简单用法
  11. Altium_Designer17-PCB-如何重新定义板子大小
  12. 微信的商业价值有哪些?
  13. 【数据分析实例】 2021年十万条厦门招聘数据分析
  14. 中信建投计算机行业周报
  15. 潍坊学院计算机系宿舍,关于表彰潍坊学院第十届大学生宿舍文化节先进集体和先进个人的决定...
  16. 分享9个超好用的免费工具/软件/网站(一定有你要的)
  17. Linux 文本对比 diff
  18. 猫眼app产品分析和原型绘制
  19. 烛光晚餐矢量图(编号:82204)_日常生活_矢量人物_矢量素材
  20. 「网络安全专利分析」一种基于多粒度异常检测的网络威胁评估方法

热门文章

  1. 用纯CSS禁止鼠标点击事件以及禁止鼠标样式
  2. 如果删除github上项目的文件
  3. 内外边距、浮动、布局相关
  4. Web前端开发学习误区,你掉进去了没?
  5. mybatis 直接执行sql 【我】
  6. jquery实现导航栏鼠标点击后实行背景高亮,点击离开恢复(超级简单!!!!)...
  7. rust为什么显示不了国服_Rust编程语言初探
  8. 开课吧java_开课吧javaee企业级开发工程师 十期
  9. android studio闪退代码不报错_代码不报错,不代表真的没错
  10. 西门子scl语言编程手册_西门子SCL编程PEEK指令讲解