CrawlSpider
類為我們提供一系列方法,可以按照指定的規(guī)則在頁面中提取并跟蹤鏈接参淹。
我們通過 rules
屬性來定義提取的鏈接的規(guī)則,看下面一個(gè)簡單例子:
# -*- 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 方法進(jìn)行爬取
Rule(
LinkExtractor(allow=('tag'), deny=('love')),
callback='parse_item'
),
)
def parse_item(self, response):
self.logger.info('開始爬忍ㄐ弧:' + response.url)
# 提取 tag 內(nèi)容
tag = response.css('h3 > a::text').extract_first()
return {
"url": response.url,
"tag": tag,
}
上面這個(gè)例子莽龟,我們從主頁 “http://quotes.toscrape.com/” 中提取包含字符 “tag” 的鏈接,然后從這些鏈接中提取 tag 和 url地梨。
Rule 的參數(shù)如下:
class scrapy.spiders.Rule(
link_extractor,
callback=None,
cb_kwargs=None,
follow=None,
process_links=None,
process_request=None
)
-
link_extractor
:定義了鏈接的提取規(guī)則菊卷。 -
callback
:回調(diào)函數(shù),表示用哪個(gè)函數(shù)來處理提取到的鏈接(注意:不可用 parse 方法作為回調(diào)函數(shù))宝剖。 -
cb_kwargs
:一個(gè)要傳遞關(guān)鍵字參數(shù)給回調(diào)函數(shù)的的字典洁闰。 -
follow
:一個(gè)布爾值,(待補(bǔ)充)万细。 -
process_links
:(待補(bǔ)充)扑眉。 -
process_request
:(待補(bǔ)充)。