魯繼文
(四川大學計算機學院,成都 610065)
基于Scrapy的論文引用爬蟲的設計與實現
魯繼文
(四川大學計算機學院,成都 610065)
互聯網的迅速發展對于信息的發現和搜集帶來巨大的挑戰,至今爬蟲技術已經成為互聯網研究熱點之一。基于Scrapy設計一個采集網頁上面引用的作者和引用信息的爬蟲,系統運行結果顯示所設計的爬蟲對于爬取引用信息,并將其整理成便于存儲和理解的結果有較好的效果。
Scrapy;爬蟲;引用爬取
網絡爬蟲,有時稱為蜘蛛,是一種系統地瀏覽萬維網的因特網機器人,通常用于網絡索引(Web Spidering)的目的[1]。Web搜索引擎和其他一些站點使用Web爬行或Spidering軟件來更新他們的Web內容或其他網站的Web內容的索引。 Web搜尋器可以復制他們訪問的所有頁面,以便以后由處理下載的搜索引擎,以便用戶可以更高效地搜索。抓取工具會消耗他們訪問的系統上的資源,并且經常在沒有默認批準的情況下訪問網站。當訪問大量頁面集合時,計劃,加載和“禮貌”的問題就會發生。存在不希望被爬行的公共站點的機制,以使爬行代理程序知道它。例如,包括robots.txt文件可以請求漫游器僅對網站的部分進行索引,或者根本不進行索引。
Scrapy是一個可以用來爬取Web站點,提取需要的數據結構應用程序開發框架,在眾多應用程序中得到廣泛運用,例如:數據挖掘、信息處理或者歷史數據處理等。盡管Scrapy的最初設計是用來Web抓取,但現在它也可以用使用API來提取數據 (如Amazon Associates Web Servicesi)或通用網絡爬蟲[2]。

圖1
首先生成用于抓取第一個URL的初始請求,然后指定要使用從這些請求下載的響應調用的回調函數。
(1)通過調用start_requests()方法(默認情況下)為start_urls中指定的URL生成請求以及將parse方法作為請求的回調函數來調用start執行的第一個請求。
(2)在回調函數中,將解析響應(網頁),并返回帶有提取的數據的對象,項對象,請求對象或這些對象的可迭代對象。這些請求還將包含回調 (可能是相同的),然后由Scrapy下載,然后由指定的回調處理它們的響應。
(3)在回調函數中,通常使用選擇器來解析頁面內容 (但也可以使用BeautifulSoup,lxml或其他任何機制),并使用解析的數據生成項目。
(4)最后,從蜘蛛返回的項目通常將持久存儲到數據庫(在某些項目管道中)或使用Feed導出寫入文件。即使這個循環(或多或少)適用于任何種類的蜘蛛,有不同種類的默認蜘蛛捆綁到Scrapy中用于不同的目的。例如:Scrapy.Spider,Generic Spiders。我們將在這里談論這些類型:Scrapy.Spider這是最簡單的蜘蛛,每個其他蜘蛛必須繼承的蜘蛛(包括與Scrapy捆綁在一起的蜘蛛,以及你自己寫的蜘蛛)。 它不提供任何特殊功能。 它只是提供了一個默認的start_requests()實現,它從start_urls spider屬性發送請求,并為每個結果響應調用spider的方法解析。蜘蛛可以接收修改其行為的參數。 蜘蛛參數的一些常見用法是定義起始URL或將爬網限制到網站的某些部分,但它們可用于配置蜘蛛的任何功能。Scrapy附帶一些有用的通用蜘蛛,你可以使用它來子類化你的Spider。他們的目的是為一些常見的抓取案例提供方便的功能,例如根據某些規則查看網站上的所有鏈接,從站點地圖抓取或解析XML/CSV Feed:CrawlSpider,XMLFeedSpider,CSV FeedSpider,SitemapSpider。
Requests和Responses是Scrapy用來抓去網頁內容的最主要的兩個對象。通常,請求對象Requests在爬蟲中生成并在其生命周期中傳到整個系統和,直到他們傳到下載器Downloader,將執行結果返回給請求的爬蟲,并將這個Requests對象釋放。
請求類Requests和響應類Responses都有子類,它們是子類中不是必需添加功能的基類。下面將描述這些請求Requests和響應Responses的子類:

請求對象Requests代表了一個HTTP請求,通常由Spider產生和由Downloader執行,從而得到一個響應Responses。回調函數(調用)callback,將調用的響應這個請求(一旦下載)作為它的第一個參數。如果一個請求不指定一個回調,Spider的parse()方法將被使用。注意,如果異常處理過程中,errback將被調用。Cookies指的是這個請求的cookies,其他使用可以有兩種形式,第一種使用dict:

第二種是使用dict列表:


一些網站返回cookies(響應),存儲下來供這個域使用,并且將在未來再次發送請求時會被發送給服務器端。這是典型的常規的Web瀏覽器的行為。但是,如果由于某種原因,你想避免與現有cookies合并,可以指示Scrapy通過 Request.meta將 dont_merge_cookies鍵設置為True。
請求的回調是當下載該請求的響應時將被調用的函數。將使用下載的Response對象作為其第一個參數來調用回調函數。例如:

此項目提取http://quotes.toscrape.com/這個網頁引用當中的信息,結合相應的作者姓名和標簽。
本文實現了兩種蜘蛛,兩個蜘蛛從同一網站提取相同的數據,但toscrape-css使用CSS選擇器,而toscrapexpath使用XPath表達式,通過list命令進行查看:


如圖,我們抓取部分作者和他們的引用信息,放在{}當中。

圖2
本文基于Scrapy設計了一個采集網頁上面引用的作者和引用信息的爬蟲,系統運行結果顯示本文所設計的爬蟲對于爬取引用信息,并將其整理成便于存儲和理解的結果有較好的效果。
[1]Web crawler.https://en.wikipedia.org/wiki/Web_crawler
[2]Twisted Introduction.http://krondo.com/an-introduction-to-asynchronous-programming-and-twisted/.
[3]Product Advertising API.https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html.
Design and Implementation Crawler of Paper Reference Based on Scrapy
LU Ji-wen
(College of Computer Science,Sichuan University,Chengdu 610065)
The rapid development of the Internet for information discovery and collection has brought great challenges,so far reptile technology has become one of the Internet research hotspot.Based on Scrapy,designs a crawler that references the author and references the information. The results of the system show that the designed crawler has a good effect on crawling the reference information and organizing it into a convenient storage and understanding.
Scrapy;Web Crawler;Reference Crawling
1007-1423(2017)09-0131-04
10.3969/j.issn.1007-1423.2017.09.030
魯繼文(1991-),男,陜西漢中人,碩士,研究方向數據挖掘
2017-02-28
2017-03-15