scrapy框架使用-下载中间件,在下载中间件里面,添加随机UA,添加随机代理ip,这个很重要

####

下载中间件的用途

  

这个下载中间件,有两个用途,一个处理请求,一个处理响应

###

下载中间件-----添加随机UA,

####

在setting里面设置一个随机ua的列表,

####

 ###

注意一定要实现这个process_request方法,这个是在请求之前加一些处理,

如果是实现的process_response方法,就是在请求之后增加了一些东西,

这个下载中间件,就是实现了一个随机选择useragent的作用,可以起到一定的反爬的效果,

####

下载中间件------添加随机代理IP,

###

这个下载中间件,也可以使用加代理的方式,这个注意是加在meta里面的,如果我们是使用的第三方的代理,可能会有用户名,密码,需要额外加密处理,这个不常用,

在setting中设置,

一.手动更新ip池
1.1在setting配置文件中新增ip池

PROXIES = [
{‘ip_port’: ‘61.160.233.8’, ‘user_pass’: ”},
{‘ip_port’: ‘125.93.149.186’, ‘user_pass’: ”},
{‘ip_port’: ‘58.38.86.181’, ‘user_pass’: ”},
{‘ip_port’: ‘119.142.86.110’, ‘user_pass’: ”},
{‘ip_port’: ‘124.161.16.89’, ‘user_pass’: ”},
{‘ip_port’: ‘61.160.233.8’, ‘user_pass’: ”},
{‘ip_port’: ‘101.94.131.237’, ‘user_pass’: ”},
{‘ip_port’: ‘219.157.162.97’, ‘user_pass’: ”},
{‘ip_port’: ‘61.152.89.18’, ‘user_pass’: ”},
{‘ip_port’: ‘139.224.132.192’, ‘user_pass’: ”}


这些IP可以从这个几个网站获取:快代理、代理66、有代理、西刺代理、guobanjia。如果出现像下面这种提示:“由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败”或者是这种,” 由 于目标计算机积极拒绝,无法连接。”. 那就是IP的问题,更换就行了。。。。发现上面好多IP都不能用。。

###

代码:

import random
import base64from youx.settings import PROXIES  

class ProxyMiddleware(object):
  def process_request(self, request, spider):
      proxy = random.choice(PROXIES)
      if proxy['user_pass'] is not None:
          request.meta['proxy'] = "http://%s" % proxy['ip_port']
          encoded_user_pass = base64.encodestring(proxy['user_pass'])
          request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
      else:
          request.meta['proxy'] = "http://%s" % proxy['ip_port']

###

####

注意这种可能需要输入密码的操作,还是要注意的,要特殊处理,

注意,记住要把这个中间件添加到这个setting设置里面,

体会这种用法的思想,代码片段只做参考,不一定能拿来就用,

####

#####

原文地址:https://www.cnblogs.com/andy0816/p/15059107.html