一、创建CrawlSpider模板
#新建项目 scrapy startprobject <新建项目> cd <新建项目> #添加爬虫 scrapy genspider -t crawl <爬虫名字> <域名> #####修改rules爬虫规则和callback保存爬取的数据#### #运行 scrapy crawl <爬虫名字>
二、模板代码示例:
# -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule class XxxSpider(CrawlSpider): name = 'xxx' allowed_domains = ['www.baidu.com'] start_urls = ['http://www.baidu.com'] rules = ( Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True), ) def parse_item(self, response): i = {} #i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract() #i['name'] = response.xpath('//div[@id="name"]').extract() #i['description'] = response.xpath('//div[@id="description"]').extract() return i
三、CrawlSpider 继承自Spider 类,除了(name, allowed_domains, start_urls)之外,还定义了rules
CrawlSpider使用rules来定义爬虫的爬取规则,并将匹配后的url自动拼接完整构造成请求提交给引擎。所以在正常情况下,CrawlSpider不需要单独手动返回请求了。
在rules中包含一个或多个Rule对象,每个Rule对爬取网站的动作定义了某种特定操作,比如提取当前相应内容里的特定链接,是否对提取的链接跟进爬取,对提交的请求设置回调函数等。
如果多个rule匹配了相同的链接,则根据规则在本集合中被定义的顺序,第一个会被使用。
Rule对象的参数
1、LinkExtracto 链接提取器,用于提取需要爬取的链接
2、callback 回调函数,提取的url请求对应的响应的处理函数,函数名是一个字符型
注意:当编写爬虫规则时,避免使用parse作为回调函数。由于CrawlSpider使用parse方法来实现其逻辑,如果覆盖了 parse方法,crawl spider将会运行失败。
3、follow 是否跟进链接,True表示跟进,就是在请求的url页面,有满足这个规则的url会被继续提取,然后组成Request发送跟调度器排队继续请求
4、process_links:指定该spider中哪个的函数将会被调用,从link_extractor中获取到链接列表时将会调用该函数。该方法主要用来过滤。
5、process_request:指定该spider中哪个的函数将会被调用, 该规则提取到每个request时都会调用该函数。 (用来过滤request)
LinkExtractor
1、allow:满足括号中正则表达式的URL会被提取,如果为空,则全部匹配。
2、deny:满足括号中正则表达式的URL一定不提取(优先级高于allow)。
3、allow_domains:会被提取的链接的domains。
4、deny_domains:一定不会被提取链接的domains。
5、restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接。
这篇文档对您是否有帮助?