当前位置:   article > 正文

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

scrapy规则化爬虫

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



前言

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


一、CrawlSpider

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

选择CrwalSpider模板创建spider

scrapy genspider -t crawl name url
  • 1

二、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发生异常时调用
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

三、link_extractor

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

from scrapy.linkextractors import LinkExtractor
  • 1

参数:

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号