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

Scrapy 规则化爬虫(1)——CrawlSpider及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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不一样的鑫仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值