Python3爬虫-Scrapy笔记3-CrawlSpider

CrawSpider

适用于对网站爬取批量网页,相对比Spider类,CrawSpider主要使用规则(rules)来提取链接,通过定义一组规则为跟踪链接提供了遍历的机制。

生成crawSpider爬虫命令

1
scrapy genspider -t crawl bxjg "bxjg.circ.gov.cn"

生成的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class XxcfSpider(CrawlSpider):
name = 'xxcf'
allowed_domains = ['bxjg.circ.gov.cn']
start_urls = ['http://bxjg.circ.gov.cn/']

#定义提取url地址规则
rules = (
#LinkExtractor 连接提取器 根据正则表达式
#callback 提取出来的url,发出请求,并且把网页内容交给callback处理 可选
#follow 当前url地址的响应是否重新经过rules来提取url地址 可选
Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True), #规则1
#规则2
#规则...
)

def parse_item(self, response):
item = {}
#item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
#item['name'] = response.xpath('//div[@id="name"]').get()
#item['description'] = response.xpath('//div[@id="description"]').get()
return item

spiders.Rule常见参数

  1. link_extractor:是一个Link Extractor对象,用于定义需要提取的链接
  2. callback 从link_extractor中没获取到链接时,参数所指定的值作为回调函数
  3. follow:指定根据该规则response提取的链接是否跟进
  4. process_links 指定该spider中那个函数将会被调用, 主要用于过滤url
  5. process_request 指定该spider中哪个函数会被被调用,用来过滤request

LinkExtractor更多常见括号中参数

  1. allow: 满足正则表达式的URL会被提取,如果为空,则全部匹配
  2. deny: 满足括号中正则的URL 一定不提取
  3. allow_domains: 会被提取的链接的domains
  4. deny_domains:一定不会被提取连接的domains
  5. restrict_xpaths: 使用xpath表达式 和 allow共同作用过滤连接 xpath满足范围内的url地址会被提取

注意点

  1. CrawlSpider中不能再有以parse为名字的数据提取方法,这个方法被CrawlSpider用来实现基础url提取等功能
  2. 一个Rule对象接收很多参数,首先第一个是包含url规则的LinkExtractor对象,常用的还有callback(制定满足规则的url的解析函数的字符串)和follow(response中提取的链接是否需要跟进)
  3. 不指定callback函数的请求下,如果follow为True,满足该rule的url还会继续被请求
  4. 如果多个Rule都满足某一个url,会从rules中选择第一个满足的进行操作