• UA池 代理IP池 scrapy的下载中间件


    # 一些概念

       - 在scrapy中如何给所有的请求对象尽可能多的设置不一样的请求载体身份标识
            - UA池,process_request(request)
        - 在scrapy中如何给发生异常的请求设置代理ip
            - ip池,process_exception(request,response,spider):request.meta['proxy'] = 'http://ip:port'
                - 将异常的请求拦截到之后,通过代理ip相关的操作,就可以将改异常的请求变成非异常的请求,然后必须重新对该请求进行重新的请求发送:return request
        - 简述下载中间件的作用及其最重要三个方法的作用
            - process_request:拦截所有非异常的请求 (正常的请求)
            - process_response:拦截所有的响应对象
            - process_exception:拦截发生异常的请求对象,需要对异常的请求对象进行相关处理,让其变成正常的请求对象,然后通过return request 对该请求进行重新发送
        - 简述scrapy中什么时候需要使用selenium及其scrapy应用selenium的编码流程
            - 实例化浏览器对象(一次):spider的init方法  或者全局属性
            - 需要编写浏览器自动化的操作(中间件的process_response)
            - 关闭浏览器(spider的closed方法中进行关闭操作)
          self.bro.quit()

    # UA池 代理IP池  scrapy的下载中间件

    # -*- coding: utf-8 -*-
    from scrapy import signals
    import random
    class MiddleproDownloaderMiddleware(object):
        user_agent_list = [
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 "
            "(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
            "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 "
            "(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 "
            "(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
            "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 "
            "(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
            "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 "
            "(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
            "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 "
            "(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
            "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 "
            "(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
            "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
            "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 "
            "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 "
            "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
            "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
            "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
            "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
            "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
            "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
            "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
            "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 "
            "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
            "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
            "(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
            "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 "
            "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
            "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 "
            "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
        ]
        PROXY_http = [
            '153.180.102.104:80',
            '195.208.131.189:56055',
        ]
        PROXY_https = [
            '120.83.49.90:9000',
            '95.189.112.214:35508',
        ]
        @classmethod
        def from_crawler(cls, crawler):
            s = cls()
            crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
            return s
    
        #可以处理拦截到所有的非异常的请求
        #spider参数表示的就是爬虫类实例化的一个对象
        def process_request(self, request, spider):
            print('this is process_request()')
            #UA伪装
            request.headers['User-Agent'] = random.choice(self.user_agent_list)
    
            #测试:代理操作是否生效
            request.meta['proxy'] = 'https://218.60.8.83:3129'
            return None
        #拦截所有的响应
        def process_response(self, request, response, spider):
    
            return response
        #拦截发生异常的请求对象
        def process_exception(self, request, exception, spider):
            if request.url.split(':')[0] == 'https':
                request.meta['proxy'] = 'https://'+random.choice(self.PROXY_https)
            else:
                request.meta['proxy'] = 'http://' + random.choice(self.PROXY_http)
            return request
        def spider_opened(self, spider):
            spider.logger.info('Spider opened: %s' % spider.name)

    - 在scrapy中如何给所有的请求对象尽可能多的设置不一样的请求载体身份标识        - UA池,process_request(request)    - 在scrapy中如何给发生异常的请求设置代理ip        - ip池,process_exception(request,response,spider):request.meta['proxy'] = 'http://ip:port'            - 将异常的请求拦截到之后,通过代理ip相关的操作,就可以将改异常的请求变成非异常的请求,然后必须重新                对该请求进行重新的请求发送:return request    - 简述下载中间件的作用及其最重要三个方法的作用        - process_request:拦截所有非异常的请求        - process_response:拦截所有的响应对象        - process_exception:拦截发生异常的请求对象,需要对异常的请求对象进行相关处理,让其变成            正常的请求对象,然后通过return request 对该请求进行重新发送    - 简述scrapy中什么时候需要使用selenium及其scrapy应用selenium的编码流程        - 实例化浏览器对象(一次):spider的init方法        - 需要编写浏览器自动化的操作(中间件的process_response)        - 关闭浏览器(spider的closed方法中进行关闭操作)

  • 相关阅读:
    IntelliJ idea 2021.3 安装使用及激活
    高项-信息系统基础-UML图
    软考高项(信息系统项目管理师)介绍
    Android Studio中的Gradle面板没有Task任务列表如何找回?
    ubuntu 安装nodejs,npm,
    解决video.js video-player不能自动播放问题
    vuex开启namespaced
    axios提交body raw格式
    vue配置服务代理
    PIDFile没有配置导致将mongodb配置成服务时启动失败
  • 原文地址:https://www.cnblogs.com/zhangchen-sx/p/10836541.html
Copyright © 2020-2023  润新知