增量爬虫
在scrapy中有很多的爬虫模版,这些模版都是基于basic模版进行的功能扩展(例如:crawl模版、feed模版等)最常用的是crawl(即增量式爬虫)
basicspider的设计理念是:从start_urls里面取出起始的url,使用start_urls来驱动引擎工作
增量式爬虫:首先以start_urls中的url为起点,从这些url中不断的请求网页,然后从新的网页中匹配出新的url重新放入调度器的队列进行调度;
再从新的url网页中提取新的url,在进行调度。依此类推直到所有的url都匹配完成为止
爬虫文件
1 # -*- coding: utf-8 -*- 2 import scrapy 3 # 在scrapy中有很多的爬虫模版,这些模版都是基于basic模版进行的功能扩展(例如:crawl模版、feed模版等)最常用的是crawl(即增量式爬虫) 4 # basicspider的设计理念是:从start_urls里面取出起始的url,使用start_urls来驱动引擎工作 5 # 增量式爬虫:首先以start_urls中的url为起点,从这些url中不断的请求网页,然后从新的网页中匹配出新的url重新放入调度器的队列进行调度 6 # 再从新的url网页中提取新的url,在进行调度。依此类推直到所有的url都匹配完成为止 7 from scrapy.linkextractors import LinkExtractor 8 # LinkExtractor用于根据一定的规则,从网页中提取新的url 9 from scrapy.spiders import CrawlSpider, Rule 10 # CrawlSpider:增量爬虫。 Rule:一个规则对象,根据LinkExtractor匹配的网址发起请求,并且回调函数 11 12 13 class BookSpider(CrawlSpider): # 继承自CrawlSpider 14 name = 'book' 15 allowed_domains = ['dushu.com'] 16 start_urls = ['https://www.dushu.com/book/1002.html'] 17 18 # rules规则:包含若干个rule对象,每一个rule对象去匹配并且请求一定的url 19 # callback: 它的回调函数,字符串格式书写 20 # LinkExtractor对象的匹配规则: 21 # allow参数代表:正则规则 22 # restrict_xpaths参数:通过xpath路径来匹配 23 # restrict_css参数: 通过css来匹配 24 rules = ( #根据Extractor匹配到的网址,来发起请求。 25 # 正则匹配 26 Rule(LinkExtractor(allow=r'/book/1002_\[1-6]\.html'), callback='parse_item', follow=True), 27 # xpath匹配 28 # Rule(LinkExtractor(restrict_xpaths='//div[@class="pages"]/a'), callback='parse_item', follow=True), 29 # css匹配 30 # Rule(LinkExtractor(restrict_css='.pages a'), callback='parse_item', follow=True), 31 ) 32 33 def parse_item(self, response): 34 item = {} 35 #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get() 36 #item['name'] = response.xpath('//div[@id="name"]').get() 37 #item['description'] = response.xpath('//div[@id="description"]').get() 38 return item