爬蟲項目(三)---采集最近一日全國各省疫情數據

該內容出自黑馬程序員教程

采集最近一日全國各省疫情數據

當然,數據來源仍然是丁香園新型冠狀病毒肺炎疫情實時動態首頁
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.pswp.cn/news/378189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378189.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378189.shtml

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

相關文章

計算機專業博士后排名,排名丨計算機專業領域TOP10,性價比超高!

原標題:排名丨計算機專業領域TOP10,性價比超高!相信各位家長、同學已經看過太多專業的排名,我問過很多理科生將來想學什么專業,聽到頻率最高的還是計算機專業。似乎大家都知道,學計算機是比較掙錢的&#x…

python set |_Python事件類| set()方法與示例

python set |Python Event.set()方法 (Python Event.set() Method) set() is an inbuilt method of the Event class of the threading module in Python. set()是Python中線程模塊的Event類的內置方法。 When the set() method is called, the internal flag of that event c…

js 命名規范

轉載于:https://www.cnblogs.com/zjx2011/p/3165043.html

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

采集從03月02日以來全國各省疫情數據 當然,數據來源仍然是丁香園新型冠狀病毒肺炎疫情實時動態首頁 url:https://ncov.dxy.cn/ncovh5/view/pneumonia 分析 確定01月22日以來全國各省疫情數據的URL 由項目(三)可以獲取全國各省疫情數據點擊可下載&…

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 。 所以…