CrawlSpider

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:(待补充)。

你可能感兴趣的:(CrawlSpider)