爬蟲項目(四)---采集從01月22日以來全國各省疫情數據

采集從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,每一個功能封裝成一個方法,方便擴展和維護

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378185.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378185.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378185.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Install PHP and Apache

http://cn.php.net/manual/en/install.unix.apache2.php Install Apache first, then sudo apt-get install libxml2-dev sudo apt-get install libmysqlclient16-dev Then, configure PHP轉載于:https://www.cnblogs.com/songsiyao/archive/2011/09/15/2178087.html

糾錯碼trick和數據壓縮trick

糾錯碼和壓縮算法是同一枚硬幣的兩面。 兩者都來自于對冗余的想法。 糾錯碼被視為向消息或文件中添加冗余的原則性方法。而壓縮算法正好相反,他們會從消息或文件中移除冗余。 壓縮和糾錯并不是彼此抵消的,相反,好的壓縮算法會移除抵消冗余&am…

計算機專業理論,計算機專業綜合理論.doc

計算機專業綜合理論2010年南京市單招班教學調研測試卷(二)計算機專業綜合理論命題人:管榮平 陳高峰 戴則萍 吳有俊本試卷分第一卷(單項選擇題、判斷題)和第二卷(填空題、程序閱讀題、編程題和計算作圖題)兩部分。第一卷1至2頁,第二卷3至6頁。兩卷滿分300…

網站上flv,MP4等格式的視頻文件播放不出來的解決辦法

在做一個網站時,發現視頻文件,比如flv,MP4格式在本地可以正常的播放,但是傳到了開發機器上,就不行了。播放器的文件地址是對的,就是一直沒有反應。 經過長時間的實驗,發現問題在與iis的設置問題…

centos6 更新數據源

嘗試了很多,還是163源最舒服. 編輯yum配置文件(163源): #vi /etc/yum.repos.d/CentOS-Base.repo [base] nameCentOS-$releasever - Base mirrorlisthttp://mirrorlist.centos.org/?release$releasever&arch$basearch&repoos #baseurlhttp://mirror.centos…

常用算法總結(窮舉法、貪心算法、遞歸與分治算法、回溯算法、數值概率算法)

博主聯系方式: QQ:1540984562 QQ交流群:892023501 群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。 目錄1、窮舉法2、貪心算法3、遞歸與分治算法4、回溯算法5、數值概率算法1、窮舉法…

struct/class的數據對齊---簡單解析

網上教程一大堆,我這邊就不再贅述廢話了 思路方法: 1,以四個為一組,最終的內存所占結果必須是四的倍數 2,優先考慮四的整數倍,之后再考慮內存空間問題 struct Beyond{int a;char b;short c;}; int mai…

工程師英語和計算機證書查詢,點擊進入國家硬件維修工程師證書查詢網站

工程師證書查詢網站人力資源社會保障部指定查詢國家職業資格證書的唯一官方網站。涵蓋全國各省市、各行業、各央企頒發的證書。電腦硬件維修工程師網上能查看國家工信部硬件維修工程師證書查詢網址:http://www.ceiaec.org/index.htm工程師證書編號在網上怎么查詢如果…

stl vector 函數_vector :: at()函數以及C ++ STL中的示例

stl vector 函數C vector :: at()函數 (C vector::at() function) vector::at() is a library function of "vector" header, it is used to access an element from specified position, it accepts a position/index and returns the reference to the element at…

敏捷開發“松結對編程”系列之七:問題集之一

本文是“松結對編程”系列的第七篇。(之一,之二,之三,之四,之五,之六,之七,之八)剛剛參加完MPD 2011深圳站,在演講中間及后來媒體采訪,被問到了一…

powerdesigner 導出數據庫表結構

http://www.360doc.com/content/12/0817/19/61497_230730771.shtml轉載于:https://www.cnblogs.com/gaohuag/p/3169095.html

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]<…

Exercises

I. Faulty sentences 1&#xff0c;Our host entertained us with many interesting stories of adventure, he has been a member of an exploration team working in the Arctic. 翻譯&#xff1a;我們的主持人用許多有趣的冒險故事來娛樂我們&#xff0c;他是北極探險團隊…

數學專業學計算機哪一行,計算數學

計算數學(一個理科專業)語音編輯鎖定討論上傳視頻計算數學是由數學、物理學、計算機科學、運籌學與控制科學等學科交叉滲透而形成的一個理科專業。中文名計算數學外文名Computational Mathematics所 屬數學計算數學專業定義編輯語音計算數學也叫做數值計算方法或數值分析。主…

數論之數字根 杭電1013

做這道題就有一種感覺&#xff0c;&#xff0c;數學真是奇妙&#xff0c;&#xff0c;在網上查了一下&#xff0c;才知道數字根有那么多奇妙的性質。不過&#xff0c;對于這道題我卻是不太理解&#xff0c;&#xff0c;主要是不會證明為什么數字根就是各個位加起來對9取余&…

ubuntu12.10下安裝mysqlworkbench出現“Dependency is not satisfiable: libctemplate0”問題的解決方案...

(原文地址&#xff1a;http://www.cnblogs.com/Deasel-s-magic-box/p/3169790.html) 之前在window下面一直用navicat&#xff0c;轉到ubuntu下之后&#xff0c;雖然也找到一個navicat的linux版&#xff0c;但是經常各種莫名其妙的掛掉&#xff0c;而且界面實在是挫的1B 。 所以…

圖片透視變換操作

由于照相機硬件設備本身的誤差&#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;乘積最大子數組…

高職單招面試自我介紹稿子計算機專業,單招面試自我介紹稿子范文

每年很多參加高職單招的同學筆試不錯&#xff0c;卻在面試環節上失敗了。單招面試需要技巧&#xff0c;需要考生細心準備&#xff0c;以自信樂觀的態度全面對單招面試。下面是小編整理的單招面試自我介紹范文及技巧&#xff0c;歡迎閱讀。1單招面試自我介紹范文各位老師好&…

as_hash ruby_Ruby中帶有示例的Hash.delete_if方法

as_hash rubyHash.delete_if方法 (Hash.delete_if Method) In this article, we will study about Hash.delete_if Method. The working of this method can be predicted with the help of its name but it is not as simple as it seems. Well, we will understand this meth…