Scrapy 规则化爬虫(1)——CrawlSpider及link_extractor

Scrapy 规则化爬虫(1)——CrawlSpider及link_extractor


目录

  • Scrapy 规则化爬虫(1)——CrawlSpider及link_extractor
  • 前言
  • 一、CrawlSpider
  • 二、rules
  • 三、link_extractor


前言

如果我们使用仅使用Spider,那么整个过程都是代码实现,如生成request,寻找下一页等,这样的话就和普通的爬虫没什么区别。爬取不同站点就要就要分别创建一个Spider,其实这里面代码思路差不多,可能有很多重复代码,这个时候,我们可以将公共部分抽离出来,有利于我们的维护,这就是规则化爬虫。


一、CrawlSpider

  • CrawlSpider是spider的一个子类
  • 我们可以根据规则Rule来进行解析爬取
  • 除了spider的属性,还提供了特有的属性

选择CrwalSpider模板创建spider

scrapy genspider -t crawl name url

二、rules

这是一个(或多个)Rule对象的列表。每个都Rule 定义了爬取网站的特定行为。
参数:

link_extractor:LinkExtracter的对象。从响应中提取需要继续爬取的链接,并将链接生成Request。

callback:和Request中的callback一样,接收响应被调用。注意不能使用parse(),因为CrawlSpider使用怕是parse()进行解析,我们不能进行重写。

cb_kwargs:dict类型,定义传递给回调函数的参数

follow:bool类型,指定是否将此规则中提取到的链接进一步生成Request,如果callback是 None, follow默认为True,否则默认为False。

process_links:对link_extractor提取到的链接进一步处理,例如修改,过滤。

process_request:对提取并生成的Request进一步处理,必须返回Request或者None

errback:Request发生异常时调用

三、link_extractor

上文中提到link_extractor是Rule的重要属性,下面了解它的用法
导入:

from scrapy.linkextractors import LinkExtractor

参数:

allow:正则表达式或正则列表。定义提取连接的规则,符合条件的进行爬取

deny:与allow相反,定义规则的链接不允许爬取,优先于allow

allow_domains: 定义符合规则的域名,域名符合进行提取

deny_domains:不进行提取的域名

deny_extensions:定义带有该类扩展名的不被爬取,默认scrapy.linkextractors.IGNORED_EXTENSIONS.

restrict_xpaths:从定义Xpath匹配的区域进行提取

restrict_css:从定义CSS匹配的区域进行提取

tags:指定从哪类标签内提取链接,默认为('a', 'area')

attrs:指定从什么属性提取链接,默认为('href')

canonicalize :bool类型,规范化每个提取的 url。默认为False

unique:bool类型,是否对连接进行去重,默认True

process_value:一个方法,用于将提取内容转换为最终链接。例如href中不是纯链接时可以使用进行处理

strip:bool类型,去空格处理。默认True

你可能感兴趣的:(scrapy框架,python,scrapy,网络爬虫)