秦亞紅 普措才仁
(西北民族大學數(shù)學與計算機科學學院 甘肅省蘭州市 730030)
中國新聞網每日及時發(fā)布新聞資訊、新聞事件動向,其中蘊含的數(shù)據信息量不言而喻[1]。加之近年來,研究人員不斷地對新聞數(shù)據進行研究,文獻[2]采用網絡爬蟲、中文分詞、向量空間模型、文本聚類等技術設計自動采集新聞并能聚類的系統(tǒng);本文則使用網絡爬蟲技術抓取中國網文化專題下的熱點新聞數(shù)據。
網絡爬蟲根據實現(xiàn)的技術和系統(tǒng)大致分為通用網絡爬蟲、主題網絡爬蟲、增量式網絡爬蟲和深層網絡爬蟲[3]。Scrapy是一個為提取網頁中結構化數(shù)據而設計的爬蟲框架,通過Scrapy框架可以快速搭建一個簡易的網站數(shù)據爬取程序,并根據自身需要對其進行修改,以滿足數(shù)據抓取需求。其框架內各組件工作原理如圖1所示。
由圖1可以看出Scrapy框架的工作原理以及各組件之間的協(xié)作。組件中的數(shù)據流為:Scrapy Engine(以下簡寫為SE)從Spiders中獲取初始url并請求Schedule調度,在獲得要爬取的url時,通過Downloader Middlewares(以下簡寫為DM)轉發(fā)給Downloader,生成頁面響應后返回給SE,此時SE將收到的響應通過Spider Middlewares發(fā)送給Spider,Spider處理頁面響應并將爬取到的Item數(shù)據以及新的url請求返送給SE,SE將Item數(shù)據傳送到Item Pipeline,url請求交給Schedule,如此循環(huán)往復,直至Schedule中沒有滿足條件的url請求,程序停止。
爬取任何一個網站前都需對網頁結構進行分析,找出目標數(shù)據在網頁元素中的位置、新聞詳情頁鏈接變化規(guī)律、網頁數(shù)據開始抓取區(qū)域等?,F(xiàn)對相關網頁結構分析如圖2。
圖2中顯示新聞網頁內容主要分布在div class=”main2”下的left_box和right_box元素中。在爬取時,根據網頁中所需目標模塊,進行鏈接過濾,以免爬取不必要目標模塊中的新聞數(shù)據。
點擊進入hot_list區(qū)域中任意鏈接進行新聞詳情頁面結構分析如圖3。
圖1:Scrapy框架工作原理
圖2:新聞列表頁面結構
由圖3可分析新聞詳情頁面網頁結構:新聞標題在網頁元素中的位置為div class=”left_box”中的h1標簽中;新聞內容所在位置為div class=”center_box”中的p標簽中。使用xpath helper工具(Chrome瀏覽器插件)定位列表頁熱點新聞區(qū)域與詳情頁中新聞標題、內容等數(shù)據在網頁元素中的位置,程序中使用xpath語句提取新聞標題與內容數(shù)據。
圖3:新聞詳情頁面結構
Scrapy使用Twisted這個異步網絡庫來處理網絡通訊,結構清晰,并且包含了各種中間件接口[4]。Scrapy框架進行數(shù)據抓取工作主要在Spider.py中實現(xiàn):給定初始url,通過rule規(guī)則進入特定url進行自定義目標數(shù)據抓取工作。Spider.py偽代碼如圖4所示。
框架中主要模塊文件Spider.py完成需編輯、修改相關模塊如:Pipeline.py文件,連接MySQL數(shù)據庫,使用SQL語句將Item中所傳遞的數(shù)據字段插入到數(shù)據表中;settings.py中設置下載延遲、修改ROBOTSTXT_OBEY為false等。此外,編寫程序啟動文件start.py,避免調試程序時輸入命令行。
圖4
部分實驗數(shù)據如圖5所示。
以上實驗闡述了中國新聞網文化專題頁面數(shù)據抓取的分析、實現(xiàn)以及存儲方法,并成功抓取到目標數(shù)據,為新聞數(shù)據獲取提供有效、可行的方法。
圖5:部分實驗數(shù)據