1,引言
在《Scrapy的架構初探》一文,我基於爬蟲開發的經驗對Scrapy官網文章做了點評和解讀,事件驅動的異步處理架構、極強的模塊化等是個絕好的框架,接着我細讀了官網的《Scrapy at a glance》,更增強了個人感覺:就是他了——開源Python即時網絡爬蟲須要一個爬蟲框架,我不想重複發明輪子,只想專一於爬蟲裏面的提取器的生成和使用,也就是Scrapy中的Spider部分。
本文大部份內容摘抄自Scrapy官網的《Scrapy at a glance》,看到Scrapy巧妙之處則加了點評。
2,Scrapy的Spider例子
在Scrapy的框架中,Spider與GooSeeker開源爬蟲的提取器相似,核心特徵是css
對GooSeeker的MS謀數臺和DS打數機比較瞭解的讀者,能夠把Spider想象成:MS謀數臺上定義的一組抓取規則 + 會員中心的爬蟲羅盤
下面咱們從官網拷貝一個例子:html
class StackOverflowSpider(scrapy.Spider): name = 'stackoverflow' start_urls = ['http://stackoverflow.com/questions?sort=votes'] def parse(self, response): for href in response.css('.question-summary h3 a::attr(href)'): full_url = response.urljoin(href.extract()) yield scrapy.Request(full_url, callback=self.parse_question) def parse_question(self, response): yield { 'title': response.css('h1 a::text').extract()[0], 'votes': response.css('.question .vote-count-post::text').extract()[0], 'body': response.css('.question .post-text').extract()[0], 'tags': response.css('.question .post-tag::text').extract(), 'link': response.url, }
看這個例子須要注意如下幾點網絡
官網文章還總結了其餘不少功能特性,總之,Scrapy是一個十分完善和強大的框架。
架構