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设置里面,
体会这种用法的思想,代码片段只做参考,不一定能拿来就用,
####
#####