Scrapy中间件

Scrapy中间件分类
* 爬虫中间件 引擎和爬虫组件交互时触发中间件
* 下载中间件 引擎和下载器交互时出发中间件
实现中间件的流程
在 middlewares.py 创建中间件类
实现所需要拦截的函数
在 settings.py 中配置开启中间件
在配置中数字越小越优先执行
下载中间件模版
class DownloadMiddleware(object):      
    """下载中间件"""
    @classmethod
    def from_crawler(cls, crawler):
        """当爬虫被创建时执行  首先执行的方法"""
        pass
        
    def spider_opened(self, spider):
        """当爬虫被打开时回调,初始化一些内容时可以放在这里 """
       pass

    def process_request(self, request, spider):
        """当 引擎 把 请求提交给下载器时回调 """
       pass
      
    def process_response(self, request, response, spider):
       """ 当下载组件把响应交给引擎时回调 """
       pass
         
    def process_exception(self, request, exception, spider):
        """ 当下载中间件引发异常时回调  """
       pass
爬虫中间件
class SpiderMiddleware(object):
    ""爬虫中间件"""
    
    @classmethod
    def from_crawler(cls, crawler):
        """当爬虫创建时回调"""
       pass

    def spider_opened(self, spider):
        """ 当爬虫初始化时回调"""
        pass
     
    def process_spider_input(self, response, spider):
        """当引擎把响应交给爬虫组件时回调"""
        pass
       
    def process_spider_output(self, response, result, spider):
        """当爬虫组件把数据或者请求提交给引擎时回调"""
        pass
       
    def process_spider_exception(self, response, exception, spider):
       """当 process_spider_input 引发异常时回调"""
        pass

    def process_start_requests(self, start_requests, spider):
        """当引擎 从爬虫获取 启动 请求时回调"""
        pass
随机UA下载中间件
import random

def get_ua():
    """生成UA"""
    first_num = random.randint(55, 62)
    third_num = random.randint(0, 3200)
    fourth_num = random.randint(0, 140)
    os_type = [
        '(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)', '(X11; Linux x86_64)',
        '(Macintosh; Intel Mac OS X 10_12_6)'
    ]
    chrome_version = 'Chrome/{}.0.{}.{}'.format(first_num, third_num, fourth_num)

    ua = ' '.join(['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36',
                   '(KHTML, like Gecko)', chrome_version, 'Safari/537.36']
                  )
    
    # 将生成UA 返回出去
    return ua

class RandomUserAgentDownloadMiddleware(object):
    
    def process_request(self, request, spider):
        """当 引擎 把 请求提交给下载器时回调"""
        
        request.headers["User-Agent"] = get_ua()

        return None
代理中间件
class RandomProxyDownloadMiddleware(object):
    def process_request(self, request, spider):

        # request.meta["proxy"] = random.choice(PROXIES)
        
        # http://127.0.0.1:6868/proxies/random  你自己代理池的地址
        proxy = requests.get('http://127.0.0.1:6868/proxies/random').text
        request.meta["proxy"] = proxy
        return None
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值