于韜 李偉 代麗偉



摘要 隨著大數據時代的到來,數據量呈幾何倍增長。以新浪新聞為代表的一系列新聞檢索網站蘊含著大量的數據資源。本文以新浪新聞為研究對象,利用Python爬蟲技術實現網頁下載與網頁解析,完成了對目標數據的高效獲取,并將獲取的信息進行格式化存儲。實驗結果表明,本文所提出的程序實現了網頁數據的快速獲取,為后續的數據挖掘提供支持。
【關鍵詞】大數據 Python 爬蟲 新浪新聞
1 引言
新浪新聞由新浪官方出品,及時發布全球新聞資訊,國內國外要聞,精彩的體育賽事報道,金融財經動向,影視娛樂事件,還有獨家微博“微”新聞,精彩隨你看,新聞、星座、笑話一個都不少。新聞是我們生活中的一部分,通過新浪的新聞板塊可以坐在家里看世界。如此多的新聞信息,其中蘊含的巨大信息量是不言而喻的,因此如何獲取是十分關鍵的。本文我們將通過爬蟲技術獲取相關新聞信息。
Python作為一種語法簡潔的程序設計語言,對于爬蟲開發上有很多優勢,在發送HTTP請求時,Python提供優秀的第三方包譬如Requests,極大簡化了對網站的訪問請求。在解析HTML源碼時,提供的BeautifuISoup庫能用極簡短的代碼完成過濾html標簽并提取文本的工作。利用Python中的pandas可以對獲取到的數據進行整理、儲存。對于網站的反爬機制,Python提供了更為簡便的解決方案,可以使用Requests庫得到一個代理IP。Python擁有足夠多的簡潔的語法和庫的支持,使得它在爬蟲開發上具有很高的效率。
本文提出的爬蟲程序通過獲取相關新聞信息,并將數據保存到本地,方便對數據的挖掘與分析。使用本程序可以節省獲取數據的時間,使用戶可以將更多精力放在數據分析上面。
2 基于Python的新浪新聞爬蟲設計
2.1 爬蟲系統設計需求
設計爬蟲系統需要解決以下幾個問題:
(1)評論數的獲?。和ㄟ^頁面鏈接獲取新聞id,然后傳遞獲取評論數。
(2)頁面信息的提取:頁面上有我們需要的標題、作者、摘要等信息。
(3)分頁鏈接的獲?。韩@取不同分頁的鏈接,以便獲取更多頁面信息。
(4)網頁內容的分析和管理:提取網頁信息,并將其存入數據庫或其他數據文件中。
2.2 與爬蟲相關的python模塊
2.2.1 網址管理器
實現網址管理的方法有以下3類:
(1) Python內存儲存:適合存儲少量信息,將網址在儲存時分為兩類:已爬取和待爬取,放入兩個集合中進行管理。
(2)關系數據庫儲存:適合網址信息進行永久性儲存,可以存到表中,建立兩個字段用來辨別是否爬取。
(3)緩存數據庫儲存:適合儲存大量的網址信息
2.2.2 網頁下載器
網頁下載器是爬蟲程序的主要核心模塊。網頁的內容一般是HTML格式,Python支持的網頁下載工具有兩類:
(1) Python官方支持的基礎模塊中的urllib包
(2) requests第三方工具包,功能強大。
2.2.3 網頁解析器
網頁解析器是對網頁內容中進行數據解析的工具。Python支持的網頁解析器有兩種:一種利用正則表達式可以將整個網頁文檔當成一個字符串,使用模糊匹配的方式來提取出有價值的數據;另一種是根據Html網頁創建成一個DOM樹,以樹的形式進行各種節點的搜索遍歷。DOM的樹形結構根據上下級關系,可以很方便的定位到各個元素。
2.2.4 數據導出
利用Python可以將數據導出為Excel格式或其它格式文件。導出數據時應注意數據編碼問題,否則導出的文件可能會出現亂碼。如圖1所示。
3 實驗設計
我們通過新浪新聞API: http://news.smacom.cn/china/進行抓取。爬蟲代碼由3個功能函數和一個主函數構成:
3.1 獲取詳細頁面內文函數( getNews Detail)
首先對詳細頁面的鏈接進行下載:通過requests方法下載html文檔,接著通過BeautifulSoup進行解析。然后通過select方法獲取文章標題、來源以及編輯信息,由于時間的格式的特殊性,利用datatime獲取新聞發表的時間。對于新聞主體,通過for依次取段落,再通過jom方法將所有段落信息整合在一起。取評論數我們通過getCommentCounts方法進行獲取。最后定義一個字典,將頁面的標題、來源、時間等信息存儲到字典中。
3.2 獲取評論數函數( getCommentCounts)
由于通過直接觀察元素信息時找不到評論數信息,可能是通過JS方式添加上去的,因此需要對評論數鏈接進行處理,而評論數鏈接與新聞id有關,因此我們首先對新聞id進行獲取。通過正則表達式獲取新聞id,在將新聞id放入評論數鏈接中,對此鏈接進行解析,即可得到相應的評論數。
3.3 剖析清單鏈接函數( parseListLinks)
在前兩個函數中我們已經獲取到了頁面的詳細信息,利用parseListLinks函數,我們獲取不同清單的鏈接,并結合getNewsDetail函數獲取清單上所有新聞信息。接著定義一個列表newsdetails,并將getNewsDetail函數獲取的信息儲存在列表中。
3.4 主函數
在主函數中可以自定義想要獲取的新聞頁數。由于每個清單有許多數據頁,我們加了一個for循環獲得分頁鏈接,通過parseListLinks方法依次獲取新聞信息,我們利用pandas中DataFrame方法對數據進行整理,最后用to excel方法將數據保存為Excel格式。
爬取流程圖如圖2所示。
4 實驗結果
通過實驗獲取新浪新聞的論文信息,運行結果如圖3所示,實驗采集了7500條信息,為后期的數據處理提供了有力支撐。
5 結語
文章分析了新浪爬蟲獲取數據時的細節實現,對國內新聞API進行爬取,使用requests方法下載網頁html文檔,并用BeautifulSoup進行解析,進而獲得相關的數據信息??傮w來說,爬蟲技術具有較高的應用價值與無限的潛在價值,通過抓取數據,可以挖掘出更有價值的信息。
參考文獻
[1]魏冬梅,何忠秀等,基于Python的Web信息獲取方法研究[J].軟件導刊,2018(01).
[2]孫立偉,何國輝等,網絡爬蟲技術的研究[J].電腦知識與技術,2010 (05).
[3]周中華,張惠,然謝江,基于Python的新浪微博數據爬蟲[J].計算機應用2014 (11).
[4]張明杰,基于網絡爬蟲技術的輿情數據采集系統設計與實現[J],現代計算機(專業版)2015 (06).
[5]朱燁行,張明杰,微博數據采集的設計與實現[J].電腦編程技巧與維護,2017 (09).