精神残废 2023-05-01 13:37 采纳率: 70.8%
浏览 13
已结题

scrapy+selenium怎么添加代理?中间件创建的driver在哪里关闭?

找不到改在哪里关闭driver,代理ip这样设置也报错,只有一个爬虫,driver在爬虫创建和中间件常见有什么不同,单线程和多线程中创建driver又有什么不同

    def process_request(self, request, spider):
        # Called for each request that goes through the downloader
        # middleware.

        # Must either:
        # - return None: continue processing this request
        # - or return a Response object
        # - or return a Request object
        # - or raise IgnoreRequest: process_exception() methods of
        #   installed downloader middleware will be called
        ip_list = self.get_ip()
        # request.meta['proxy'] = 'http://'+choice(ip_list)
        self.driver.get(request.url)
        sleep(2)
        response=HtmlResponse(request.url,body=self.driver.page_source,request=request,encoding='utf8')
        # print(self.driver.page_source)
        # self.driver.quit()
        return response

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-01 16:12
    关注
    • 文章:scrapy 爬虫之selenium中间件的使用(爬取简书内容) 中也许有你想要的答案,请看下吧
    • 除此之外, 这篇博客: Scrapy中selenium的应用-----并通过京东图书书籍信息爬取项目进行实操!中的 ⑦拓展:通过编写中间件实现IP池中使用随机IP: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 本人使用的是webapi,直接连接至快代理中的隧道代理!操作简单。只需在中间件中加入以下代码,并在快代理中将你本机外网IP加入白名单即可直接使用!

      # 在middlewares.py文件中加入以下中间件即可:
      #IP池
      from scrapy import signals
      from w3lib.http import basic_auth_header
      class ProxyDownloaderMiddleware:
          def process_request(self, request, spider):
              proxy = "tps191.kdlapi.com:15818"
              request.meta['proxy'] = "http://%(proxy)s" % {'proxy': proxy}
              # 用户名密码认证
              # request.headers['Proxy-Authorization'] = basic_auth_header('${username}', '${password}')  # 白名单认证可注释此行
              return None
      

      注意:如果出现Bug,或者没出你也为了预防,在settings.py中进行如下配置:
      在这里插入图片描述

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月1日
  • 已采纳回答 5月1日
  • 修改了问题 5月1日
  • 创建了问题 5月1日