• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      使用網(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ù),并對其進行分析,并采用可視化的圖表形式來顯示疫情數(shù)據(jù)的變化??梢暬瘓D表的顯示更為直觀清晰。在獲取相關(guān)的疫情數(shù)據(jù)時我們借助網(wǎng)絡(luò)爬蟲來爬取疫情數(shù)據(jù),使用python提供的充足的類庫功能對其進行分析并轉(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)頁上獲取信息,然后對這些信息進行處理,轉(zhuǎn)換成用戶所想要的數(shù)據(jù),并把結(jié)果反饋給用戶。web crawler構(gòu)成了搜索引擎重要的組成部件,但現(xiàn)在網(wǎng)上常用的搜索引擎大多是按照關(guā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來進行爬取。Python語言的語法簡單明了,開發(fā)環(huán)境清晰,學(xué)習(xí)難度較低。Python語言是解釋性的腳本語言,它是開源的,而且具有平臺無關(guān)性,可以高效地開發(fā)各種應(yīng)用程序。Python擁有大量的擴展庫,這些擴展庫相對成熟,而且能夠支持幾乎所有的領(lǐng)域應(yīng)用開發(fā)。因此,對于科研人員進行處理工程技術(shù)問題,實驗數(shù)據(jù)的處理、圖表的制作以及進行科學(xué)計算分析,Python都非常適用。

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

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

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

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

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

      從fish-search算法到best first serach算法,算法并不是對所有的URL進行爬取,只是選擇預(yù)測相似度較高的網(wǎng)址進行爬取。不管是爬行主題隨爬行過程動態(tài)變化的主題爬蟲還是基于文本位置的爬蟲還是根據(jù)關(guān)鍵字 key分類進行相關(guān)度判定的爬蟲,都只是把網(wǎng)頁內(nèi)的文本內(nèi)容做為主題進行判定,沒有考慮到鏈接,所以在數(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)頁鏈接一起進行判定。比如說可以先對網(wǎng)頁的鏈接進行分析,不同指向的URL進行不同的定義,外向鏈表示站外網(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ù),不能直接使用,必須先進行處理,可使用正則表達(dá)式,xpath,bs4等。

      Json數(shù)據(jù)是一種輕量級的數(shù)據(jù)交換格式,閱讀與編寫容易,也方便機器的解析與生成,非常適合進行數(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進行分析,在分析的時候,先定義一個 beautifulsoup對象。在這個beautifulsoup對象中將要爬取的頁面源碼數(shù)據(jù)加載進去,然后使用此對象的屬性和方法來實現(xiàn)標(biāo)簽的定位和進行數(shù)據(jù)的提取。

      xpath是目前解析效率較高且通用性最強的解析方式。在解析的時候通過實例化一個etree對象,并且將目標(biāo)頁面的源碼數(shù)據(jù)加載到此對象中,然后通過使用etree對象的xpath方法結(jié)合對應(yīng)的表達(dá)式進行標(biāo)簽的定位和數(shù)據(jù)的提取。Python的Numpy庫提供了標(biāo)準(zhǔn)的數(shù)學(xué)函數(shù)能夠?qū)?shù)據(jù)進行快速的運算,而且還提供了很多基于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ù)后,并不是馬上就能使用,往往要進行篩選,清洗才能提取實際需要的數(shù)據(jù)。對于一些無用數(shù)據(jù),或是相同數(shù)據(jù)進行刪除,對一些有誤數(shù)據(jù)進行檢驗。對于缺少或是丟失的值,可以使用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ù)存儲起來進行下一步的處理。常見的數(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ù)分析結(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語言及其強大的擴展庫進行疫情數(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
      井冈山市| 馆陶县| 鄂尔多斯市| 安宁市| 安岳县| 新乡县| 托里县| 张家港市| 林芝县| 江城| 龙南县| 普宁市| 邛崃市| 江西省| 洛宁县| 登封市| 垦利县| 天祝| 马尔康县| 岳西县| 依兰县| 内黄县| 蕉岭县| 玉林市| 澜沧| 昌邑市| 色达县| 洛扎县| 武清区| 曲沃县| 雷波县| 通化市| 宁陵县| 霍城县| 松滋市| 清丰县| 彭泽县| 西丰县| 竹山县| 普陀区| 长宁区|