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