Scrapy分布式知识(一)---Scrapy工作流程图,五大核心组件(DownloadMiddleware、Spider)

这是自己手动整理的一个Scrapy工作流程图和网络上找到的关于Scrapy的流程图,大家可以看看

Scrapy目录结构介绍:

下面介绍Scrapy五大核心组件

  1. DownloadMiddleware,下载中间件:它可以改写你发起的请求,也可以处理返回的数据(或者是当出现异常的时候进行一些处理)
    1. 官方文档位置:https://docs.scrapy.org/en/latest/topics/downloader-middleware.html

    2. 目前我接触到可以在中间件中添加IP代理池、UA池、对异常的返回结果(如对网站发起请求出现频繁后进行处理重新发起请求等)。
    3. 使用方法:
      1. 需要在Setting中开启中间件
      2. 在中间件中有3个方法可以调用
        1. process_request(requestspider)
          1. 返回None:不受影响(默认)
          2. 返回requests:Scrapy就会将这个request重新放回调度队列中
          3. 返回response:就会去调用process_response这个方法,处理相关的response
          4. Raise IgnoreRequest:就会去调用process_exception()这个方法,处理相应的异常
          5. def process_response(self,request,response,spider):
            
                #改写response的状态码
                response.status=201
            
                return response
             
        2. process_response(request, response, spider):处理response的方法
          1. 返回response:没有什么影响,会继续执行其他中间件的process_response,可以在里面对response的信息进行一些改写。比如说这里就简单的将response的状态码进行改写
          2. 返回resquest:重新将这个request放回到队列中
          3. Raise IgnoreRequest:就会去调用process_exception()这个方法,处理相应的异常
        3. process_exception(request, exception, spider):处理异常的方法(比如超时异常,连接失败异常等,当出现这些异常的时候就会调用这个方法)
          1. 返回None:没有影响
          2. 返回response:就会执行其他中间件的process_response,并且不会再去执行相应的process_exception方法(返回response证明你已经成功得到结果了,不是异常)
          3. 返回resquest:将这个request请求重新加回到队列中,重新发起一次请求(这个比较常用)。这里的作用可以当做是一次失败的重试,可以在这个请求中加入一些代理,或者是其他的请求
          4. def process_exception(self,request,exception,spider):
            	logger = logging.getLogger(__name__)
            	self.logger.debug('GetException')
            	request.meta['proxy']='http://120.41.224.226:8080'
            	return request表示重新发起一次请求

             

        4. 也可以在下载中间件中设置不要对失败进行重新尝试的代码

 

 

 

  1. Spider(爬虫):爬虫主要是来干活的,用于从返回的响应数据中解析出自己需要的数据信息,即所谓的实体(Item,用来返回给管道来处理)。用户也可以从中提取出其他的URL链接,让Scrapy进行抓取下一个页面。
    1. 它有以下几个属性
      1. name:启动Scrapy爬虫
      2. allowed_domains:允许爬取的网址(如只想爬取baidu.com下的baidu.com/xxx/xxx的内容,不需要如sogou.com/等其他网址时可以设置,目前我都是直接注释)
      3. start_urls:起始的URL(即发起请求的第一个URL地址,默认是调用到Scrapy已经默认写好的parse方法)
      4. custom_settings:该方法可以覆盖Settings.py文件中的配置)以字典的形式来书写,里面的键名就是settings.py里面的变量名
      5. start_requests:如果要设置一个只发起POST请求的爬虫,可以在里面设置,修改Method、回调函数等
      6. 进行如下配置后便不会再去使用默认的parse方法,而是使用你自己定义的parse_user方法

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值