crawlSpider原理

crawlSpider是Spider的派生类,其继承于Spider类,除了继承过来的属性外(name,allow_domains),还提供了新的属性和方法。多用于爬取有规则的网站

crawlSpider特有属性

  1. rules: 是Rule对象的集合,用于匹配目标网站并排除干扰

rules的参数为:

ink_extractor, : linkExtractor对象
callback=None, : 设置回调函数
follow=None, : 设置是否跟进
process_links=None, :可以设置回调函数,对所有提取到的url进行拦截
process_request=identity : 可以设置回调函数,对request对象进行拦截。

其中的link_extractor既可以自己定义,也可以使用已有LinkExtractor类,主要参数为:

allow:满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。
deny:与这个正则表达式(或正则表达式列表)不匹配的URL一定不提取。
allow_domains:会被提取的链接的domains。
deny_domains:一定不会被提取链接的domains。
restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接。还有一个类似的restrict_css

关于follow属性,值得注意的是

当parse_response函数解析statr_url至_requests_to_follow函数中后,函数遍历所有的Rule对象, 并使用其link_extractor属性提取链接,对于提取到的链接, 我们把它加入到一个集合中使用链接发送一个请求, 并且callback的最终结果是self._parse_response。其实就是说, 当我们 follow一个链接时, 我们其实是用rules把这个链接返回的response再提取一遍(对返回的response再次提取)
follow的表述

crawlSpider的流程:

源代码:
class CrawlSpider(Spider):
    rules = ()
    def __init__(self, *a, **kw):
        super(CrawlSpider, self).__init__(*a, **kw)
        self._compile_rules()

    #首先调用parse()来处理start_urls中返回的response对象
    #parse()则将这些response对象传递给了_parse_response()函数处理,并设置回调函数为parse_start_url()
    #设置了跟进标志位True
    #parse将返回item和跟进了的Request对象    
    def parse(self, response):
        return self._parse_response(response, self.parse_start_url, cb_kwargs={
   }, follow=True
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值