新闻  |   论坛  |   博客  |   在线研讨会
使用隧道转发爬虫代理保持IP/切换IP
laical | 2020-12-08 17:31:42    阅读:167   发布文章

隧道转发代理:

“亿牛云爬虫代理IP”通过固定云代理服务地址,建立专线网络链接,代理平台自动实现毫秒级代理IP切换,保证了网络稳定性和速度,避免爬虫客户在代理IP策略优化上投入精力。

简单来说每秒新建http请求,每个http请求随机分配一个代理IP,每个IP有效时间20秒。毕竟是随机分配的,每个http请求分配的代理IP都不一样,那如何保持每个http请求是同一个IP?

采用Proxy-Tunnel自主切换IP:

该模式适合一些需要登陆、Cookie缓存处理等爬虫需要精确控制IP切换时机的业务。 爬虫程序可以通过设置HTTP头Proxy-Tunnel: 随机数, 当随机数相同时,访问目标网站的代理IP相同。

例如 :需要登录,获取数据两个请求在一个IP下,只需对这组请求设置相同Proxy-Tunnel,例如:Proxy-Tunnel: 12345, 该组请求在代理有效期内使用相同的代理IP。

注意 :同一时间不同请求组可以设置不同Proxy-Tunnel: 随机数,并发完成数据爬取。

使用相同IP访问HTTPS目标网站 :1 使用Connection: keep-alive和Proxy-Connection: keep-alive方式访问目标网站,代理会确保在一个会话中的所有请求都通过一个IP到达目标网站 2 设置相同Proxy-Tunnel,有些库封装比较高层次,请务必确认向代理发送了该HTTP头。 


class ProxyMiddleware(object):                
            def process_request(self, request, spider):
                # 代理服务器(产品官网 www.16yun.cn)
                proxyHost = "t.16yun.cn"
                proxyPort = "31111"
                # 代理验证信息
                proxyUser = "username"
                proxyPass = "password"
                request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort)
                # 添加验证头
                encoded_user_pass = base64ify(proxyUser + ":" + proxyPass)
                request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass                    
                # 设置IP切换头(根据需求)
                tunnel = random.randint(1,10000)
                request.headers['Proxy-Tunnel'] = str(tunnel)

通过TCP请求切换IP:

每个TCP请求自动切换,是指爬虫代理为爬虫程序发出的每个TCP请求随机提供一个代理IP,同一个TCP会话中IP不变 通过设置Proxy-Connection: Keep-Alive或Connection: Keep-Alive可以保持同一个Session代理IP不变

例如 需要登录,获取数据两个请求在一个IP下,只需保证该组请求在一个TCP(Keep-Alive)会话下, 该组请求在代理有效期内使用相同的代理IP。

HTTPS 使用爬虫代理访问HTTPS网站时,会自动开启KeepAlive,同一个Session(HTTPS会话)代理IP不变。如需要每个请求强制切换IP,可以设置Proxy-Connection: Close和Connection: Close 


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客