scrapy框架杂记

      一般爬虫的逻辑是:给定起始页面,发起访问,分析页面包含的所有其他链接,然后将这些链接放入队列,再逐次访问这些队列,直至边界条件结束。为了针对列表页+详情页这种模式,需要对链接抽取(link extractor)的逻辑进行限定。好在scrapy已经提供,关键是你知道这个接口,并灵活运用

scrapy框架爬取流程

    爬取流程
    Scrapy的整个数据处理流程由Scrapy引擎进行控制,通常的运转流程包括以下的步骤:
    
    引擎询问蜘蛛需要处理哪个网站,并让蜘蛛将第一个需要处理的URL交给它。
    
    引擎让调度器将需要处理的URL放在队列中。
    
    引擎从调度那获取接下来进行爬取的页面。
    
    调度将下一个爬取的URL返回给引擎,引擎将它通过下载中间件发送到下载器。
    
    当网页被下载器下载完成以后,响应内容通过下载中间件被发送到引擎;如果下载失败了,引擎会通知调度器记录这个URL,待会再重新下载。
    
    引擎收到下载器的响应并将它通过蜘蛛中间件发送到蜘蛛进行处理。
    
    蜘蛛处理响应并返回爬取到的数据条目,此外还要将需要跟进的新的URL发送给引擎。
    
    引擎将抓取到的数据条目送入条目管道,把新的URL发送给调度器放入队列中。
    
    上述操作中的2-8步会一直重复直到调度器中没有需要请求的URL,爬虫停止工作。

rules

    Rule是在定义抽取链接的规则,上面的两条规则分别对应列表页的各个分页页面和详情页,关键点在于通过restrict_xpath来限定只从页面特定的部分来抽取接下来将要爬取的链接。 
    2.follow用途 
    第一:这是我爬取豆瓣新书的规则 rules = (Rule(LinkExtractor(allow=(r’^https://book.douban.com/subject/[0-9]*/’),),callback=’parse_item’,follow=False), ),在这条规则下,我只会爬取定义的start_urls中的和规则符合的链接。假设我把follow修改为True,那么爬虫会start_urls爬取的页面中在寻找符合规则的url,如此循环,直到把全站爬取完毕。 
    第二:rule无论有无callback,都由同一个_parse_response函数处理,只不过他会判断是否有follow和callback
    
    a) 添加爬取规则属性rules,这个属性是一个列表,它可以包含多个Rule,每个Rule描述了那些链接需要抓取,那些不需要。这些rule可以有callback,也可以没有。
    
    b) 爬虫的通常需要在一个网页里面爬去其他的链接,然后一层一层往下爬,scrapy提供了LinkExtractor类用于对网页链接的提取
    
    LinkExtractor常用的参数有:
    
    allow:提取满足正则表达式的链接
    deny:排除正则表达式匹配的链接(优先级高于allow)
    allow_domains:允许的域名(可以是str或list)deny_domains:排除的域名(可以是str或list)
    restrict_xpaths:提取满足XPath选择条件的链接(可以是str或list)
    restrict_css:提取满足css选择条件的链接(可以是str或list)
    tags:提取指定标签下的链接,默认从a和area中提取(可以是str或list)
    attrs:提取满足拥有属性的链接,默认为href(类型为list)
    unique:链接是否去重(类型为boolean)
    process_value:值处理函数(优先级大于allow)

    rules = (
            Rule(LinkExtractor(allow=(r'https://movie.douban.com/top250.*')), callback='parse_item'),
        )
    
    ***   若要使用回调函数,就不要重写parse,不然底层会判断重写,如果重写就调用
        def parse_item(self,response):

CrawlScrapy爬取全网站

    在Scrapy基础——Spider中,我简要地说了一下Spider类。Spider基本上能做很多事情了,但是如果你想爬取知乎或者是简书全站的话,你可能需要一个更强大的武器。 
    CrawlSpider基于Spider,但是可以说是为全站爬取而生。
    
    简要说明
    
    CrawlSpider是爬取那些具有一定规则网站的常用的爬虫,它基于Spider并有一些独特属性
    
    rules: 是Rule对象的集合,用于匹配目标网站并排除干扰 
    parse_start_url: 用于爬取起始响应,必须要返回Item,Request中的一个。 
    因为rules是Rule对象的集合,所以这里也要介绍一下Rule。它有几个参数:link_extractor、callback=None、cb_kwargs=None、follow=None、process_links=None、process_request=None 
    其中的link_extractor既可以自己定义,也可以使用已有LinkExtractor类,主要参数为:
    
    allow:满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。 
    deny:与这个正则表达式(或正则表达式列表)不匹配的URL一定不提取。 
    allow_domains:会被提取的链接的domains。 
    deny_domains:一定不会被提取链接的domains。 
    restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接。还有一个类似的restrict_css 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值