隧道代理可自动变更,免去频繁更换代理的麻烦,仅需一次性配置一个代理IP,其它变IP工作由隧道自动完成。
假设你从免费代理手上拿到一些池子,当然你也可以用爬虫程序自己爬找出后测试筛选可用的
,直接在浏览器上面请求,页面效果如下图所示:
(既然是免费的就不打码了可用率匿名度众所周知)
现在,你需要做的就是写一个程序,周期性访问这个 url,拉取当前最新可用的 IP 地址,然后把它放到 Redis 中。
这里,我们使用 Redis 的 Hash 这个数据结构,其中 Hash 的字段名就是IP:端口
,里面的值就是跟每个 IP 相关的一些信息。
你这个程序需要确保,当前在 Redis 里面的代理地址,全部都是可用的。这里,我给出了一个示例程序:
"""
ProxyManager.py
~~~~~~~~~~~~~~~~~~~~~
简易代理池管理工具,直接从URL中读取所有
最新的代理,并写入Redis。
"""
import yaml
import time
import json
import redis
import datetime
import requests
class ProxyManager:
def __init__(self):
self.config = self.read_config()
self.redis_config = self.config['redis']
self.client = redis.Redis(host=self.redis_config['host'],
password=self.redis_config['password'],
port=self.redis_config['port'])
self.instance_dict = {}
def read_config(self):
with open('config.yaml') as f:
config = yaml.safe_load(f.read())
return config
def read_ip(self):
resp = requests.get(self.config['proxy']).text
if '{' in resp:
return []
proxy_list = resp.split()
return proxy_list
def delete_ip(self, live_ips, pool_ips):
ip_to_r