爬蟲項目(二)---采集從03月02號以來的世界各國疫情數據

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

采集從03月02號以來的世界各國疫情數據

步驟:
Ⅰ,重構項目(一)的代碼,以提高擴展性

  1. 把功能封裝到一個類中
  2. 每一個小功能變成一個方法
  3. 通過run方法啟動爬蟲
import requests
import re
import json
from bs4 import BeautifulSoupclass 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=False)def crawl_last_day(self):#采集最近一天各國疫情信息#1,發送請求,獲取首頁內容home_page = self.get_content_from_url(self.home_url)#2,解析首頁內容,獲取最近一天的各國疫情數據last_data = self.parse_home_page(home_page)#3,保存數據self.save(last_data,'E:\Jupyter_workspace\study\python\爬蟲\last_day_nature_num1.json')def run(self):self.crawl_last_day()if  __name__ == '__main__':spider = CoronaSpider()spider.run()

在這里插入圖片描述
很顯然以達成原樣的效果,重構完成

Ⅱ,實現采集從03月02號以來的世界各國疫情數據
加載最近一日各國疫情數據
遍歷各國疫情數據,獲取從03月02號以來的世界各國疫情的URL
發送請求,獲取從03月02號以來的世界各國疫情的json字符串
解析各個國家疫情的json字符串,轉化為Python類型數據,添加到列表中
將該列表以json格式保存從03月02號以來的世界各國疫情數據信息

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這個ensure_ascii是dump方法的屬性控制編碼,為了顯示漢字,我這邊運行一直保存,沒法用這個編碼格式,故這里去掉了,當然要是顯示漢字,可以加上'''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):#采集從03月02號以來的世界各國疫情數據#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)#定義列表,用于存儲各國從03月02號以來的疫情數據corona_virus = []#2,遍歷各國疫情數據,獲取從03月02號以來的世界各國疫情的URLfor country in tqdm(last_day_corona_virus,'獲取從01月23號以來的世界各國疫情信息'):statustics_data_url = country['statisticsData']#3,發送請求,獲取從03月02號以來的世界各國疫情的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 run(self):#self.crawl_last_day_corona_virus()self.crawl_corona_virus()if  __name__ == '__main__':spider = CoronaSpider()spider.run()

這個json文件是各國的疫情數據:https://file1.dxycdn.com/2020/0315/831/3402160489185731552-135.json
在這里插入圖片描述

在這里插入圖片描述

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

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

相關文章

【原創】StreamInsight查詢系列(二十)——查詢模式之檢測間隙事件

上篇文章介紹了查詢模式中如何檢測異常事件,這篇博文將介紹StreamInsight中如何檢測間隙事件。 測試數據準備 為了方便測試查詢,我們首先準備一個靜態的測試數據源:// 創建數據源,要注意的是4:16和4:30之間存在的事件間隙 var sou…

git 項目過大問題解決

當項目過大時,git clone時會出現error: RPC failed; HTTP curl The requested URL returned error: Gateway Time-out的問題 解決方法很簡單,在git clone時加上--depth1即可解決 克隆的項目只包含最近的一次commit的一個分支,體積很小&#x…

java bitset_Java BitSet hashCode()方法及示例

java bitsetBitSet類hashCode()方法 (BitSet Class hashCode() method) hashCode() method is available in java.util package. hashCode()方法在java.util包中可用。 hashCode() method is used to retrieve hash code for this bit set (BitSet). hashCode()方法用于檢索此位…

【數據結構基礎應用】【查找和排序算法】

代碼參考《妙趣橫生的算法.C語言實現》 文章目錄前言1、順序查找2、折半查找3、直接插入排序4、選擇排序5、冒泡排序6、希爾排序7、快速排序8、堆排序9、排序算法性能比較10、所有算法的code(C語言)前言 本章總結查找和排序算法:順序查找、折…

MarshalHelper

1 public class MarshalHelper2 {3 /// <summary>4 /// 結構體轉byte數組5 /// </summary>6 /// <param name”structObj”>要轉換的結構體</param>7 /// <returns>轉換后的byte數組</returns&g…

深入淺出SharePoint——InvokeWorkflow的妙用

應用場景&#xff1a;在Parallel Activity中使用InvokeWorkflow來達到間接關閉并行分支的功能。 TestInvokeWorkflow方法用于啟動監聽工作流。endinvoke方法用戶關閉啟動的監聽工作流實例。 private void TestInvokeWorkflow(object sender, EventArgs e) { SPWeb web SPConte…

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

該內容出自黑馬程序員教程 采集最近一日全國各省疫情數據 當然&#xff0c;數據來源仍然是丁香園新型冠狀病毒肺炎疫情實時動態首頁 url&#xff1a;https://ncov.dxy.cn/ncovh5/view/pneumonia 思路&#xff1a;首先需要先確定全國各省疫情數據的位置 全國各省份的疫情數據…

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

原標題&#xff1a;排名丨計算機專業領域TOP10&#xff0c;性價比超高&#xff01;相信各位家長、同學已經看過太多專業的排名&#xff0c;我問過很多理科生將來想學什么專業&#xff0c;聽到頻率最高的還是計算機專業。似乎大家都知道&#xff0c;學計算機是比較掙錢的&#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日以來全國各省疫情數據 當然&#xff0c;數據來源仍然是丁香園新型冠狀病毒肺炎疫情實時動態首頁 url&#xff1a;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

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

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

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

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

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

centos6 更新數據源

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

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

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

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

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

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

工程師證書查詢網站人力資源社會保障部指定查詢國家職業資格證書的唯一官方網站。涵蓋全國各省市、各行業、各央企頒發的證書。電腦硬件維修工程師網上能查看國家工信部硬件維修工程師證書查詢網址&#xff1a;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…