CrawlSpider
类为我们提供一系列方法,可以按照指定的规则在页面中提取并跟踪链接。
我们通过 rules
属性来定义提取的链接的规则,看下面一个简单例子:
# -*- coding: utf-8 -*-
import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
# 链接提取器
from scrapy.contrib.linkextractors import LinkExtractor
class QuotesSpider(CrawlSpider):
name = "quotes"
allowed_domains = ['quotes.toscrape.com']
start_urls = ['http://quotes.toscrape.com/']
rules = (
# 提取匹配包含 'tag' 但不含 'love' 的链接并使用 parse_item 方法进行爬取
Rule(
LinkExtractor(allow=('tag'), deny=('love')),
callback='parse_item'
),
)
def parse_item(self, response):
self.logger.info('开始爬取:' + response.url)
# 提取 tag 内容
tag = response.css('h3 > a::text').extract_first()
return {
"url": response.url,
"tag": tag,
}
上面这个例子,我们从主页 “http://quotes.toscrape.com/” 中提取包含字符 “tag” 的链接,然后从这些链接中提取 tag 和 url。
Rule 的参数如下:
class scrapy.spiders.Rule(
link_extractor,
callback=None,
cb_kwargs=None,
follow=None,
process_links=None,
process_request=None
)
-
link_extractor
:定义了链接的提取规则。 -
callback
:回调函数,表示用哪个函数来处理提取到的链接(注意:不可用 parse 方法作为回调函数)。 -
cb_kwargs
:一个要传递关键字参数给回调函数的的字典。 -
follow
:一个布尔值,(待补充)。 -
process_links
:(待补充)。 -
process_request
:(待补充)。