国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

使用網(wǎng)絡(luò)爬蟲技術(shù)獲取新冠病毒疫情數(shù)據(jù)的應(yīng)用研究

2020-07-27 07:30:30林麗星
關(guān)鍵詞:折線圖爬蟲網(wǎng)頁

林麗星

(閩西職業(yè)技術(shù)學(xué)院 信息與制造學(xué)院,福建 龍巖 364021)

2019-2020年爆發(fā)的新型冠狀病毒肺炎,2020年1月12日被世界衛(wèi)生組織命名為COVID-19[1]。在此之前人類身上并未發(fā)現(xiàn)過新型冠狀病毒?;颊吒腥玖诵滦凸跔畈《竞?,在潛伏期便很容易傳染給別人,而自身一旦發(fā)病會導(dǎo)致呼吸困難,少數(shù)病情危急會導(dǎo)致死亡。

新型冠狀病毒的傳播方式,更多是通過呼吸道空氣飛沫傳播和親密接觸的形式達(dá)到人傳人的惡劣局面。至于是否存在氣溶膠方式傳播,在試行第六版診療方案指明只有在相對封閉的環(huán)境中,同時氣溶膠濃度處于高濃度狀態(tài)下,才存在傳播的可能性[2]。

目前全世界疫情形勢并不樂觀,新冠狀病毒的肆虐,所有中國人以及整個世界都在關(guān)注著疫情的消息,關(guān)注著數(shù)據(jù)的變化,盼望著拐點的出現(xiàn),患病人數(shù)的減少,治愈病例的增多。各大主流網(wǎng)站每天都在播報各類數(shù)據(jù),包括新增的,治愈的病例等,單純的數(shù)字顯示不夠直觀,如果能夠獲得疫情相關(guān)的數(shù)據(jù),并對其進(jìn)行分析,并采用可視化的圖表形式來顯示疫情數(shù)據(jù)的變化??梢暬瘓D表的顯示更為直觀清晰。在獲取相關(guān)的疫情數(shù)據(jù)時我們借助網(wǎng)絡(luò)爬蟲來爬取疫情數(shù)據(jù),使用python提供的充足的類庫功能對其進(jìn)行分析并轉(zhuǎn)換為直觀的折線圖來顯示。

1 疫情數(shù)據(jù)獲取可采用的技術(shù)

要爬取網(wǎng)絡(luò)上的數(shù)據(jù),可使用網(wǎng)絡(luò)爬蟲來實現(xiàn)。網(wǎng)絡(luò)爬蟲(spiderr或web crawle),也有人稱之為網(wǎng)絡(luò)蜘蛛,像蜘蛛一樣在網(wǎng)絡(luò)上爬行并獲取所需要的數(shù)據(jù)。網(wǎng)絡(luò)爬蟲是一段程序,它從網(wǎng)頁上獲取信息,然后對這些信息進(jìn)行處理,轉(zhuǎn)換成用戶所想要的數(shù)據(jù),并把結(jié)果反饋給用戶。web crawler構(gòu)成了搜索引擎重要的組成部件,但現(xiàn)在網(wǎng)上常用的搜索引擎大多是按照關(guān)鍵字進(jìn)行檢索,檢索出來的數(shù)據(jù)是盡可能大地覆蓋全網(wǎng)絡(luò),因為檢索數(shù)據(jù)也是多樣化,有文字、圖片、音視頻等。對于一些網(wǎng)上非結(jié)構(gòu)化數(shù)據(jù),并且信息含量比較多的數(shù)據(jù),目前的搜索引擎可能不能很好地去搜尋出用戶想要的數(shù)據(jù)。而網(wǎng)絡(luò)爬蟲就能很好地解決一般搜索引擎的局限性。

在數(shù)據(jù)爬取時,可以使用Python來進(jìn)行爬取。Python語言的語法簡單明了,開發(fā)環(huán)境清晰,學(xué)習(xí)難度較低。Python語言是解釋性的腳本語言,它是開源的,而且具有平臺無關(guān)性,可以高效地開發(fā)各種應(yīng)用程序。Python擁有大量的擴(kuò)展庫,這些擴(kuò)展庫相對成熟,而且能夠支持幾乎所有的領(lǐng)域應(yīng)用開發(fā)。因此,對于科研人員進(jìn)行處理工程技術(shù)問題,實驗數(shù)據(jù)的處理、圖表的制作以及進(jìn)行科學(xué)計算分析,Python都非常適用。

要獲取疫情數(shù)據(jù),使用到 Python的庫有Numpy庫,用于處理數(shù)組和矢量運算;Pathon庫用于處理數(shù)據(jù)結(jié)構(gòu)及進(jìn)行數(shù)據(jù)分析;Matplotlib庫用于將數(shù)據(jù)分析結(jié)果以圖表的形式顯示出來。

2 網(wǎng)絡(luò)爬蟲技術(shù)獲取疫情數(shù)據(jù)的步驟

抓取網(wǎng)頁中的數(shù)據(jù),采用的步驟是:抓取數(shù)據(jù),對數(shù)據(jù)進(jìn)行篩選清洗,清洗好的數(shù)據(jù)為了更持久的使用存儲于本地機(jī)中,對數(shù)據(jù)進(jìn)行分析處理,最后以可視化的形式顯示出來。

2.1 搜索數(shù)據(jù)

在網(wǎng)絡(luò)上搜尋數(shù)據(jù)的時候,因為 AJAX技術(shù)的存在,必須使用基于事件驅(qū)動的爬蟲引擎。根據(jù)新冠疫情數(shù)據(jù)這一主題,對頁面內(nèi)容或是對應(yīng)的URL鏈接進(jìn)行搜索,對頁面的主題進(jìn)行判斷,根據(jù)主題去搜索相關(guān)的網(wǎng)頁。根據(jù)主題進(jìn)行數(shù)據(jù)的爬取,最重要的是確定高效的主題判定策略。常用的主題判定策略有基于網(wǎng)頁內(nèi)容的判定策略、基于網(wǎng)頁鏈接的判定策略及混合內(nèi)容及鏈接的判定策略。

從fish-search算法到best first serach算法,算法并不是對所有的URL進(jìn)行爬取,只是選擇預(yù)測相似度較高的網(wǎng)址進(jìn)行爬取。不管是爬行主題隨爬行過程動態(tài)變化的主題爬蟲還是基于文本位置的爬蟲還是根據(jù)關(guān)鍵字 key分類進(jìn)行相關(guān)度判定的爬蟲,都只是把網(wǎng)頁內(nèi)的文本內(nèi)容做為主題進(jìn)行判定,沒有考慮到鏈接,所以在數(shù)據(jù)獲取的時候,會導(dǎo)致某些數(shù)據(jù)的遺漏。

PageRank算法及 HITS算法,只考慮網(wǎng)頁的鏈接結(jié)構(gòu),雖然能夠發(fā)現(xiàn)關(guān)鍵網(wǎng)頁,具有全局觀,能指導(dǎo)爬蟲爬取的方向,但是因為沒有考慮到頁面的內(nèi)容,所以有可能會出現(xiàn)主題不匹配的現(xiàn)象,爬取的數(shù)據(jù)跟用戶所需要的數(shù)據(jù)會差別較大。

所以在爬取數(shù)據(jù)時,一般會結(jié)合網(wǎng)頁內(nèi)容和網(wǎng)頁鏈接一起進(jìn)行判定。比如說可以先對網(wǎng)頁的鏈接進(jìn)行分析,不同指向的URL進(jìn)行不同的定義,外向鏈表示站外網(wǎng)址,交叉鏈表示友情鏈接,水平鏈表示同級網(wǎng)址,下行鏈表示下級網(wǎng)址,上行鏈表示上級網(wǎng)址。根據(jù)不同的鏈接判定主題內(nèi)容的相關(guān)性。內(nèi)容與鏈接的結(jié)合,覆蓋率及準(zhǔn)確率都有所提高。所以我們在爬取數(shù)據(jù)的時候,更多的是兩者結(jié)合一起使用。

2.2 抓取數(shù)據(jù)

數(shù)據(jù)爬取的時候,根據(jù)HTML標(biāo)簽去爬取標(biāo)簽中存儲的文本數(shù)據(jù)。除此之外,還會去爬取標(biāo)簽的屬性中存儲的數(shù)據(jù)。根據(jù)網(wǎng)絡(luò)中數(shù)據(jù)類型的不同,爬蟲爬取數(shù)據(jù)的方式也有區(qū)別。如果是結(jié)構(gòu)化數(shù)據(jù)格式,無須處理直接轉(zhuǎn)換即可,比如json格式的數(shù)據(jù),比如 xml數(shù)據(jù);對于非結(jié)構(gòu)化數(shù)據(jù),比如HTML格式的數(shù)據(jù),不能直接使用,必須先進(jìn)行處理,可使用正則表達(dá)式,xpath,bs4等。

Json數(shù)據(jù)是一種輕量級的數(shù)據(jù)交換格式,閱讀與編寫容易,也方便機(jī)器的解析與生成,非常適合進(jìn)行數(shù)據(jù)交互的場景。在爬取新冠數(shù)據(jù)的時候,使用 json.loads(requests.get(url=findurlv)json()['data'])從騰訊網(wǎng)站中通過網(wǎng)址來抓取數(shù)據(jù)。數(shù)據(jù)抓取時,通過jsonpath來解析json數(shù)據(jù),有N重嵌套的 json數(shù)據(jù)亦能分析并獲取想要的信息。jsonpath能夠用于從 json文檔中獲取用戶想要的數(shù)據(jù)。

非結(jié)構(gòu)化數(shù)據(jù)使用 bs4進(jìn)行分析,在分析的時候,先定義一個 beautifulsoup對象。在這個beautifulsoup對象中將要爬取的頁面源碼數(shù)據(jù)加載進(jìn)去,然后使用此對象的屬性和方法來實現(xiàn)標(biāo)簽的定位和進(jìn)行數(shù)據(jù)的提取。

xpath是目前解析效率較高且通用性最強的解析方式。在解析的時候通過實例化一個etree對象,并且將目標(biāo)頁面的源碼數(shù)據(jù)加載到此對象中,然后通過使用etree對象的xpath方法結(jié)合對應(yīng)的表達(dá)式進(jìn)行標(biāo)簽的定位和數(shù)據(jù)的提取。Python的Numpy庫提供了標(biāo)準(zhǔn)的數(shù)學(xué)函數(shù)能夠?qū)?shù)據(jù)進(jìn)行快速的運算,而且還提供了很多基于C語言的API,使用很方便,同時還能提高數(shù)據(jù)的運算效率。[3]

在獲取新冠疫情數(shù)據(jù)時,通過內(nèi)容與鏈接分析,最終爬取騰訊網(wǎng)站上的關(guān)于疫情變化的相關(guān)數(shù)據(jù)。從網(wǎng)站上爬取的數(shù)據(jù)是結(jié)構(gòu)化數(shù)據(jù),所以在 python中直接保存為 json格式的數(shù)據(jù)即可。alldata=json.loads(requests.get(url=findurlv)json()['data'])#抓取數(shù)據(jù)

2.3 數(shù)據(jù)篩選

獲取網(wǎng)頁上的數(shù)據(jù)后,并不是馬上就能使用,往往要進(jìn)行篩選,清洗才能提取實際需要的數(shù)據(jù)。對于一些無用數(shù)據(jù),或是相同數(shù)據(jù)進(jìn)行刪除,對一些有誤數(shù)據(jù)進(jìn)行檢驗。對于缺少或是丟失的值,可以使用lambda函數(shù)來查看,并且在確定缺失原因后,可以考慮用指定數(shù)來補充。對于連續(xù)變量的處理較為簡單,可以設(shè)定為平均值或者設(shè)定為中位值。分類變量可以考慮用眾數(shù)來補充。對于一些異常值,單變量用蓋帽法或是分箱法來處理,多變量用聚類法來處理。數(shù)據(jù)的清洗可以使用Pandas庫,它提供了方便的類表格的統(tǒng)計操作和類SQL操作,同時還提供了強大的缺失值處理功能,使用數(shù)據(jù)預(yù)處理工作更加方便快捷。[4]在獲取疫情數(shù)據(jù)時,只需要時間及各類患者人數(shù)的數(shù)據(jù),所以只需對其按時間排序即可。

alldata.sort(key=lambda x:x['date'])#按日期排序

2.4 數(shù)據(jù)存儲

爬取到網(wǎng)頁數(shù)據(jù)后,將數(shù)據(jù)存儲起來進(jìn)行下一步的處理。常見的數(shù)據(jù)存儲方式有三種,可以將數(shù)據(jù)存儲成文本txt文件或是csv文件;或是以數(shù)組的形式存儲或是存儲到數(shù)據(jù)庫中。在爬取新冠疫情數(shù)據(jù)的時候,將數(shù)據(jù)存儲于數(shù)組中,按日期排序,依次獲取確診,疑似,死亡及治愈數(shù)量。對應(yīng)代碼為:

#獲取各類人數(shù)放至數(shù)組中

confirmsick_list.append(int(item['confir m']))

suspectsick_list.append(int(item['suspect']))

deadsick_list.append(int(item['dead']))

healsick_list.append(int(item['heal']))

2.5 分析并可視化呈現(xiàn)

圖1 疫情走勢圖

對數(shù)據(jù)進(jìn)行分析,根據(jù)分析結(jié)果使用 python的 MatPlotlib庫把數(shù)據(jù)分析結(jié)果以折線圖的形式顯示出來。使用MatPlotlib庫,用戶只需要書寫少量的代碼就能夠繪制多種高質(zhì)量的二維或三維圖形。pyplot是MatPlotlib庫的關(guān)鍵模塊,提供了很多接口,能夠快速地構(gòu)建多種圖表,比如函數(shù)圖像、直方圖及散點圖等。[5]使用時,調(diào)用相對應(yīng)的接口即可。因為要反映疫情的變化情況,所以使用折線圖來顯示。關(guān)鍵代碼為:

plt.figure('疫情走勢圖', facecolor='#e3e3e3', figsize=(11, 6))

plt.title('疫情走勢圖 ', fontsize=35)

plt.plot(li_alldate,confirmsick_list,label='確診人數(shù)')

plt.plot(li_alldate,suspectsick_list,label='疑似人數(shù)')

plt.plot(li_alldate,healsick_list,label='治愈人數(shù)')

plt.plot(li_alldate,deadsick_list,label='死亡人數(shù)')

plt.gca().xaxis.set_major_formatter(mdates.Dat eFormatter('%m-%d'))

plt.gcf().autofmt_xdate()

today=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())

plt.xticks(pd.date_range('2020-01-13',today),rotation=90)

plt.grid(linestyle=':')

plt.legend(loc='best')

plt.savefig('疫情走勢圖.png')

#plt.show()

繪圖函數(shù)處理后的結(jié)果以圖片的形式保存,因為騰訊網(wǎng)站上的疫情數(shù)據(jù)是從1月13號開始的,所以截止到3月5號的數(shù)據(jù)對應(yīng)折線圖如圖1所示。圖1的折線圖可以很直觀地顯示新型冠狀病毒疫情的趨勢走向。

3 結(jié)語

借助python語言及其強大的擴(kuò)展庫進(jìn)行疫情數(shù)據(jù)的爬取,通過其豐富的庫及強大的快速繪圖功能,能非直觀地用折線圖顯示疫情的趨勢走向。

猜你喜歡
折線圖爬蟲網(wǎng)頁
利用網(wǎng)絡(luò)爬蟲技術(shù)驗證房地產(chǎn)灰犀牛之說
Optimization Design of Miniature Air Quality Monitoring System Based on Multi-Sensor Fusion Technology
基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
基于CSS的網(wǎng)頁導(dǎo)航欄的設(shè)計
電子制作(2018年10期)2018-08-04 03:24:38
利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
電子測試(2018年1期)2018-04-18 11:53:04
讓折線圖顯示在一個單元格中
再多也不亂 制作按需顯示的折線圖
電腦愛好者(2018年2期)2018-01-31 19:07:26
基于URL和網(wǎng)頁類型的網(wǎng)頁信息采集研究
電子制作(2017年2期)2017-05-17 03:54:56
大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
電子制作(2017年9期)2017-04-17 03:00:46
美化Excel折線圖表
電腦愛好者(2017年1期)2017-04-14 10:16:22
海南省| 和平区| 简阳市| 乐亭县| 廊坊市| 葵青区| 邻水| 休宁县| 抚顺市| 通江县| 巴林左旗| 吐鲁番市| 兴山县| 娄烦县| 九江县| 济南市| 温泉县| 河曲县| 沙洋县| 江北区| 澄城县| 贵南县| 滦平县| 那曲县| 思茅市| 安多县| 桂林市| 姜堰市| 库伦旗| 普洱| 陆丰市| 平陆县| 丹巴县| 当涂县| 微山县| 会理县| 东平县| 都江堰市| 通道| 曲阳县| 浑源县|