前言

学习知识是要一步一步来的,下面为大家带来点新知识,爬虫的Rules规则,就是对爬取的网页中的链接进行分析,提取出我们需要的继续爬下去的链接,继续爬取下去。

简析

当我们想要提取start_urls中的Url中的链接时,可以加一个Rules,用来提取,该Rules为继承CrawlSpider才有的规则,相比于继承Spider

下面我们先初识一下这个规则

1
2
3
rules = [       
Rule(LinkExtractor(allow=(r'http://exmaple.com/ershoufang/\d+',)), callback='parse_item'),
]

Rule与LinkExtractor具体参数

Rule对象

Role对象有下面参数

  • link_extractor:链接提取规则

  • callback:回调函数(如何处理)

  • cb_kwargs:附加参数,可以在回调函数中获取到

  • follow:是否对提取的网页进行进一步提取(默认:False)

  • process_links:处理所有的链接的回调,用于处理从response提取的links,通常用于过滤(参数为link列表)

  • process_request:链接请求预处理(添加header或cookie等)

LinkExtractor

LinkExtractor常用的参数有

  • allow:提取满足正则表达式的链接

  • deny:排除正则表达式匹配的链接(优先级高于allow

  • allow_domains:允许的域名(可以是strlist

  • deny_domains:排除的域名(可以是strlist

  • restrict_xpaths:提取满足XPath选择条件的链接(可以是strlist

  • restrict_css:提取满足css选择条件的链接(可以是strlist

  • tags:提取指定标签下的链接,默认从aarea中提取(可以是strlist

  • attrs:提取满足拥有属性的链接,默认为href(类型为list

  • unique:链接是否去重(类型为boolean

  • process_value:值处理函数(优先级大于allow

代码实现和分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# -*- coding: utf-8 -*-
#导入接下来要使用的类
from scrapy.spiders import CrawlSpider,Rule
from scrapy.linkextractors import LinkExtractor
#自定义的存放数据的类(容器)
from DoubanSpider.items import DoubanspiderItem

class DoubanSpider(CrawlSpider):
name = 'douban'
allowed_domains = ['movie.douban.com']
start_urls = ['https://movie.douban.com/top250']
#定义一个爬取规则,从start_urls中的网页提取LinkExtractor上规定的所有链接,callback为对这些链接如何处理
rules =(
Rule(LinkExtractor(allow=(r'https://movie.douban.com/subject/\d+')), callback='parse_item'),
)

def parse_item(self, response):
item = DoubanspiderItem()
item['title'] = "".join(response.xpath('//span[@property="v:itemreviewed"]/text()').extract())
yield item