一两年前的代理都是代理池模式的,每次链接时代理IP是自己控制的,没发现问题
现在用隧道代理,每个TCP在远端分别用不同的IP代理并返回,自己可以通过设置header的部分字段来通知远端隧道更换IP
遇到一个问题,就是我的处理逻辑是爬一段时间,当这个IP被ban掉后换新的IP,但是死活换不了
经过debug和查找代理的相关资料发现 要在headers里
request.headers['Proxy-Connection'] = "close" request.headers["Connection"] = "close"
将这两个字段设置为CLOSE 才能关闭HTTPS
但是设置以后问题依旧,问题表现还是爬到指定数量后无法更换IP
后来发现 这个在middleware process_response函数中处理的request实际上还是要跟其他自己生成的request一起放到调度器里
,这里就会用到scrapy自带的去重filter,就是实际上这个request没发出去,直接被scrapy自己过滤掉了。
处理完request后 设置这个字段
request.dont_filter = True
就可以不通过过滤器,直接发送请求了。
scrapy的组件比较多,原生的downloadmiddleware很多都默认启用,比如UA cookies 去重filter这类的,自己写middleware时候要注意。