999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Python的健康數據爬蟲設計與實現

2019-06-10 01:01:19程增輝夏林旭劉茂福
軟件導刊 2019年2期

程增輝 夏林旭 劉茂福

摘 要:在網絡健康資訊研究中,數據獲取是首先要解決的問題,但傳統抓取工具無法滿足多變的數據源,研究高效爬取健康資訊內容新方法迫在眉睫。基于Python的網絡健康資訊抓取方案,整合多個數據源,抓取內容更為全面;利用WebDriver和Python的Selenium庫,能夠較好地應對復雜網絡狀況,通過多線程技術極大提高爬蟲效率。對抓取的癌癥數據進行統計分析,對多線程效率進行對比分析,顯示爬蟲具有良好的適應性。基于Python的網絡健康咨詢抓取方案能快速抓取網絡資訊,為后續科研打下基礎。

關鍵詞:爬蟲;多數據源;Python;網頁解析

DOI:10. 11907/rjdk. 181626

中圖分類號:TP319文獻標識碼:A文章編號:1672-7800(2019)002-0060-04

Abstract: During the research of online health data, the data acquirement is the first problem to be solved, however the traditional data crawlers cannot be adapted to the current various data sources. Therefore, a new approach should be adopted to parse health data efficiently from Weibo, Web portals and other platforms. This article tries to design a new data crawler based on one Web driver offered from selenium library and implement using Python and its related network library. This data clawer can handle complex net environment and improve efficiency with the multithread technique. In the end, we analyze the obtained data on topic of cancer and compare the efficiency under the multithread programming. It shows that the data crawler designed in this article can adapt the net environment well and be a lot of helps in the further research of online health data.

Key Words:crawler; various data source; Python; Web page parsing

0 引言

隨著生活水平的不斷提高和計算機技術的迅速發展,互聯網已經成為大眾獲取資訊的主要渠道[1],網絡資訊形式與內容也伴隨著時代發展產生了巨大變化。在資訊形式方面,典型的門戶網站仍以圖文形式的文章為主,新興平臺的資訊形式則更為豐富,出現了微博、短視頻、移動新聞客戶端等格式。在資訊內容方面,除傳統的時事新聞外,健康、娛樂等方面的內容更受年輕人追捧。新型資訊形式的出現,意味著對于網絡數據的研究方法必須作出相應改變。網絡數據內容的變更,意味著數據挖掘與研究工作的重心也要隨之變化。

國外針對社交平臺(如Facebook、Twitter)的研究與分析[2-4]較多,而國內針對這一領域的研究還較欠缺。一方面,相關研究剛剛起步,缺乏相關研究方法;另一方面,缺乏相關研究數據,深入研究難以展開[5]。新浪微博占據了社交平臺87%的份額,聚集了大量年輕用戶和海量資訊內容,是中國微博產業的主導力量[6]。微博具有用戶基數大、傳播速度快、內容時效性強和數據量極大的特點,是非常好的數據來源。另外,主流門戶網站如網易、新浪、騰訊、搜狐等,作為老牌的“網絡新聞集散地”,仍是用戶獲取資訊的主要來源。這些平臺擁有大量用戶,每天產生海量數據,并且新聞形式較為統一,是非常方便且有價值的研究對象。

網民對健康問題較為重視,“微信計步”、“悅跑圈”等一些健康類型手機應用風靡社交平臺,健康類資訊成為人們分享的熱點。醫療衛生信息化使醫療衛生數據以驚人的幾何速度增長[7]。目前,已有針對網絡健康數據的相關研究[8-11],如果能及時抓取網絡上的健康資訊并加以深入分析與挖掘,或許能對網絡輿情進行有效檢測和引導,同時能分析出不同平臺用戶特點和關注點,使之更為個性化和人性化。然而,網絡上的健康資訊十分零散,無法做到有效整合,而且因為資訊來源和平臺不同導致不同資訊在結構上具有較大差異。因此,健康領域的網絡數據研究具有很大的潛力可以挖掘。

已經開發出一些爬蟲工具獲取研究數據,但這些爬蟲對社交平臺和門戶網站的新型網頁結構支持不夠,在研究中容易出現各種問題。其往往只針對特定平臺進行適配,不具備普適性。除此之外,由于開發時間較長,缺乏對新技術的支持,很難適應當前的網絡環境。

本文爬蟲通過對各平臺網頁結構的分析,支持微博、門戶網站等主流數據源,在一定程度上保證了數據的完整性。Python提供了針對網絡協議標準庫,對網絡協議的各個層次進行了抽象封裝[12],因而十分適合于網絡爬蟲開發。本文爬蟲以Python為技術基礎進行開發, 綜合運用多個Python網絡函數庫,能夠很好地適應當前的網絡環境。

1 微博爬蟲

微博用戶基數大,資訊的更新與傳播速度遠遠高于一般網絡媒體,是非常好的數據來源。目前針對微博平臺的數據爬蟲研究[13-16]大致可分為基于API、基于網絡爬蟲和基于網絡數據流3種獲取技術[17]。然而,微博登錄機制復雜,其提供的API存在訪問數量、頻率等方面的限制。此外,微博的網頁結構與傳統網頁區別很大,結構更加細碎繁瑣。因此,如果要大規模爬取微博數據,傳統爬取方法可能不再有效,需另辟蹊徑。Selenium是一個自動化測試工具,具有以下幾個特性:①可對多種瀏覽器進行測試,如IE、Firefox、Safari、Chrome、Android手機瀏覽器等;②支持多種語言,如Java、C#、Python、Ruby、PHP等;③跨平臺,如Windows、Linux、iOS、Android等;④開源免費[18]。本文爬蟲利用Python中Selenium開源庫的模擬特性,期望實現微博數據的高效爬取,同時將數據進行結構化存儲,使數據更加條理清晰。

1.1 爬取流程

微博爬蟲工作流程如圖1所示。與傳統網站不同,由于新浪微博的限制,需要首先進行登錄,之后才可進行數據抓取。登錄以后,選定 “新浪健康”賬戶為種子用戶,逐步解析并獲取微博內容,更新用戶隊列作為后續爬取對象。最后對微博進行結構化存儲,方便后續使用。

1.2 微博登錄

登錄微博后才能爬取數據,因而首先要解決微博登錄問題。與傳統的會話方式不同,本文通過模擬用戶的登錄動作實現微博登錄,這會使新浪微博系統將爬蟲程序當作真正的用戶,從而省去諸多麻煩。Python的Selenium庫擁有成熟的模擬特性,其提供了方便的接口用以定位網頁上的按鈕與文本框。

微博登錄步驟:①初始化Selenium庫中的driver,利用driver.get(url)函數獲取頁面信息;②通過driver.get_element_by_name()函數定位“用戶名”及“密碼”輸入框,通過driver.get_element_by_xpath()函數定位“登錄”按鈕,利用send_keys()函數輸入用戶名及密碼;③利用click()函數模擬點擊“登錄”按鈕。登錄成功之后,只需維持driver便可方便地訪問微博數據。

1.3 內容獲取

登錄之后便可進行內容獲取。微博網頁包含各種內容及對象,結構復雜,但是每條微博形式類似,一般包括作者、正文、點贊量、轉發量、評論量等。首先通過Selenium開源庫中的driver.page_source()函數進行頁面源碼抓取,然后利用正則表達式對網頁內容進行篩選。為了方便存儲,將作者、正文、評論量、點贊量、轉發量等作為一條記錄存儲在數據庫中。

為保證微博爬取的完整性和高效性,本文采取一種基于深度優先的爬取策略。于娟等[19]對主題爬蟲進行了綜述研究,闡述了多種主題爬蟲的抓取策略。本文爬蟲以“健康”為主題進行內容篩選,采用基于文字內容的啟發式策略。首先選擇“新浪健康”微博用戶作為種子用戶,獲取其所有的微博內容并存儲。在與其關聯的用戶中,以“健康”、“醫生”、“醫藥”等關鍵詞進行篩選,依次爬取并存儲該用戶的微博,如此反復,即可獲得大量的健康微博資訊。

2 門戶網站爬蟲

門戶網站頁面內容包羅萬象,包含文字、圖片甚至音頻、視頻等,頁面結構及源碼較為復雜。但是,門戶網站往往對相同主題內容作了歸類,因此不需要對資訊內容進行篩選。利用Python的Selenium庫、BeautifulSoup和正則表達式可以實現對內容的準確定位,以期實現高效爬取。

2.1 內容獲取

爬蟲的首要任務是獲取目標網頁內容,以便后續分析和研究。傳統的HTTP請求方式獲取網頁HTML源碼,由于存在編碼格式和網站自身的訪問限制等問題,極易出現錯誤,如編碼格式差異導致的字符亂碼、爬取速度過快導致的網站封鎖訪問等等。本文爬蟲通過模擬用戶瀏覽,利用Selenium庫提供的函數對HTML源碼進行獲取,通過正則表達式提取源碼,可有效避免上述問題。

門戶網站通常將同類新聞放在同一頻道中,健康內容獲取分為兩步:①獲取健康新聞列表;②根據列表獲取詳細的資訊內容。因此,爬取過程需要維護一個新聞列表隊列和多個爬取線程。在初始狀態下,首先依據新聞列表獲取健康資訊地址并存入隊列中。多個爬取線程根據新聞隊列情況讀取隊列中的地址爬取健康資訊。利用Selenium庫中的driver.page_source()獲取源碼,然后利用BeautifulSoup對頁面進行解析。BeautifulSoup能夠從HTML或XML文件中提取數據,能夠通過用戶指定的轉換器實現通用的文檔瀏覽、查找和修改[20]。篩選出資訊的標題、作者、發表時間、來源、正文等信息后,作為一條記錄存儲到相應的數據庫中,一旦隊列為空則結束線程停止爬取。

2.2 相關問題

在實踐過程中,為了增強程序的健壯性,使之面對各種問題時仍能高效穩定運行,本文對爬蟲細節作了諸多修改:①為了更真實地模擬網頁瀏覽過程,防止因頻繁訪問而被網站封鎖,本文爬蟲設置了隨機時間間隔。在兼顧效率和穩定性的情況下,根據實驗結果,將間隔設置為2~5s;②為了更好地處理因網絡狀況不佳而出現的爬蟲中斷,為爬蟲設計了斷點記錄功能。在獲取新聞列表和詳細資訊內容的同時,將正在爬取的地址和其在新聞列表中的位置保存起來。爬蟲重新啟動時,根據斷點位置繼續運行,無需從頭開始,這一功能可節省大量時間;③為了提高效率,采用了多線程技術,多個線程同時爬取新聞內容可大幅提高效率。

3 實驗分析

本實驗分為3部分:①對爬蟲的多線程效率進行對比分析;②對爬取的數據依據年月進行統計分析;③對以“癌癥”為關鍵詞的資訊進行統計分析。

在爬蟲效率測試中,選取騰訊健康頻道作為數據源,通過設置不同的線程數量進行多次速度測試,時間效率統計如表1和圖2所示。

經計算:從單線程到雙線程,爬蟲速度提升了33.75%;從雙線程到三線程,爬蟲速度再次提升了20.45%;而從三線程到四線程,爬蟲速度的提升微乎其微,僅僅有0.8%。直接對比單線程與三線程,爬蟲速度則提升了47.36%。

不難看出,多線程技術的引入極大提升了爬蟲效率。然而當線程較多時,系統需要分配出一定資源維護各個線程;同時考慮到網絡帶寬等因素,此時增加線程對爬蟲速度的影響已不明顯。因此,多線程技術的使用對計算機本身的計算能力也是一種考驗,需要綜合考慮機器性能、網絡帶寬等各種因素。

本實驗針對新浪、網易、騰訊三大門戶網站,爬取了2015年1月至2016年12月期間總計9 422篇健康類文章。對這些文章按照年月進行統計,如圖3所示。

由圖3可知,按月份計算,2015年的文章數量始終多于或等于2016年同期。與此同時,微博、移動新聞客戶端等資訊平臺因其傳播便捷性、內容時效性和與傳統平臺不同的社交屬性,更加符合移動互聯網特點,越來越受到年輕用戶的關注與喜愛,不斷搶占傳統門戶網站市場。作為研究者應敏感地覺察到這一趨勢,及時調整未來的研究方向。

對這些文章的主體進行關鍵字匹配與分析,主要匹配了“癌”、“腫瘤”這兩個關鍵詞,并按照年月對這些文章進行統計,如圖4所示。

從圖4可知,以“癌癥”為主題的健康文章數量每月始終在140篇上下波動,其始終是人們關注的焦點。比較2016年與2015年兩年的情況,兩條曲線擬合較好,并未受到微博、移動新聞客戶端等平臺沖擊,進一步佐證了“癌癥”健康資訊的焦點屬性。

4 結語

本文提供了健康數據爬取工具,集成了門戶網站、微博等多數據源,使得爬取內容較為全面;另外,本文爬蟲支持多線程技術,能夠達到較高的爬取效率。然而,面對復雜的網絡,本文爬蟲仍存在一些問題,有進一步優化的空間。例如,通過緩存與多進程技術可以再次提升爬蟲效率,建立分布式爬蟲以應對海量數據。本文爬蟲工具的實現,為后續研究工作奠定了基礎。

參考文獻:

[1] 中國互聯網絡信息中心(CNNIC). 第41次中國互聯網絡發展狀況統計報告[R]. 2018.

[2] CARLISLE J, PATTON R. Is social media changing how we understand political engagement?an analysis of Facebook and the 2008 presidential election[J].? Political Research Quarterly,2013,66(4):883-895.

[3] STRAFLING N,KRAMER N C. The influence of social aspects and personality on the usage of social media for study related exchange[J]. Gruppendynamik und Organisationsberatung,2013,44(4):402-403.

[4] CUNLIFFE D,MORRIS D,PRYS C. Young bilinguals language behaviour in social networking sites: the use of welsh on facebook[J]. Journal of Computer-Mediated Communication,2013,18(3):339-361.

[5] 周中華,張惠然. 基于Python的新浪微博數據爬蟲[J]. 計算機應用,2014,34(11):3131-3134.

[6] 廉捷,周欣. 新浪微博數據挖掘方案[J]. 清華大學學報:自然科學版,2011,51(10):1300-1305.

[7] 卞偉瑋,王永超. 基于網絡爬蟲技術的健康醫療大數據采集整理系統[J]. 山東大學學報:醫學版,2017,55(6):1-9.

[8] 黃曉琴. 醫療健康大數據關鍵問題及對策研究[J].? 中國數字醫學,2016(5):81-83.

[9] 顏延,秦興彬,樊建平,等. 醫療健康大數據研究綜述[J].? 科研信息化技術與應用,2014(6):3-16.

[10] 董誠,林立,金海,等. 醫療健康大數據:應用實例與系統分析[J]. 大數據,2015(2):78-89.

[11] 代濤. 健康醫療大數據發展應用的思考[J]. 醫學信息學雜志,2016,37(2):2-8.

[12] 陳琳,任芳. 基于Python的新浪微博數據爬蟲程序設計[J].? 信息系統工程,2016(9):97-99.

[13] 盧楊,李華康,孫國梓.? 一種基于P2P技術的分布式微博爬蟲系統[J].? 江蘇大學學報:自然科學版,2016(3):296-301.

[14] 李學龍,龔海剛.? 大數據系統綜述[J].? 中國科學:信息科學,2015(1):1-44.

[15] 程學旗,靳小龍,王元卓,等.? 大數據系統和分析技術綜述[J].? 軟件學報,2014(9):1889-1908.

[16] 彭希羨,朱慶華,劉璇.? 微博客用戶特征分析及分類研究——以“新浪微博”為例[J].? 情報科學,2015 (1):69-75.

[17] 余容,李光強. 微博文本挖掘研究綜述[J],情報探索,2017(5):97-103.

[18] 盧晨. 基于Selenium進行Web應用測試研究[J]. 軟件導刊,2015,14(1):154-155.

[19] 于娟,劉強. 主題網絡爬蟲研究綜述[J]. 計算機工程與科學,2015,37(2):231-237.

[20] 時永坤. 基于WebDriver的定向網絡爬蟲設計與實現[J]. 軟件,2016,37(9):94-97.

(責任編輯:杜能鋼)

主站蜘蛛池模板: 精品久久高清| 亚洲永久精品ww47国产| 91成人在线观看| 婷婷综合在线观看丁香| 亚州AV秘 一区二区三区 | 2021国产精品自产拍在线| 国产日韩AV高潮在线| 2021最新国产精品网站| 国产青榴视频| 国产精品视频猛进猛出| 色网站免费在线观看| 伊人久久综在合线亚洲2019| 欧美日本激情| 欧美精品v欧洲精品| 久久天天躁狠狠躁夜夜躁| 亚洲福利视频网址| 亚洲第一综合天堂另类专| 黄色网站在线观看无码| 亚洲日韩Av中文字幕无码| 国产精品女主播| 欧美性天天| 亚欧美国产综合| 欧美精品色视频| 亚洲美女AV免费一区| 日本在线视频免费| 99精品国产自在现线观看| 日本黄色a视频| 欧美第九页| 国产手机在线ΑⅤ片无码观看| 67194亚洲无码| 搞黄网站免费观看| 在线视频97| 老司机精品一区在线视频| 亚洲精品国产精品乱码不卞| 日韩毛片基地| 亚洲综合第一页| 中文字幕 91| 四虎影视国产精品| 国产精品污视频| 国产va在线| 色综合热无码热国产| 国产一国产一有一级毛片视频| 久久国产亚洲偷自| 蜜桃臀无码内射一区二区三区| 久久精品人人做人人爽电影蜜月| jizz国产视频| 2021天堂在线亚洲精品专区| 中文字幕第4页| 亚洲国产成人久久77| 亚洲日本中文字幕天堂网| 91视频国产高清| 国产精品女主播| 免费在线国产一区二区三区精品| 热久久国产| 亚洲一区毛片| 国产激情国语对白普通话| 国产香蕉97碰碰视频VA碰碰看| 国产毛片高清一级国语| 高清不卡一区二区三区香蕉| 欧美性精品不卡在线观看| 欧美亚洲第一页| 欧美激情视频二区三区| 国产第一页屁屁影院| 欧美成人一区午夜福利在线| 久久久久久国产精品mv| 精品国产成人高清在线| 久久这里只有精品国产99| 日本欧美成人免费| 午夜丁香婷婷| 伊人久久婷婷| 国产va欧美va在线观看| 99人妻碰碰碰久久久久禁片| 国产精品成人不卡在线观看| 久久久久无码精品国产免费| 国产激情无码一区二区免费 | 妇女自拍偷自拍亚洲精品| 色噜噜综合网| 美女黄网十八禁免费看| 中文字幕色站| 69视频国产| 欧美高清三区| 国产午夜无码片在线观看网站 |