工作需要,在爬虫的时候要获取代理,但是一个代理接口获取的速度不满足需求,故用两个代理多线程进行获取,提高速度(有多的接口会更快)
原理是两个接口同时运行,把得到的代理IP放入集合中,然后加入队列中,先进先出。每次入队之前判断是否已存在于集合中(即已经使用过,如果使用过则舍弃),保证每次使用的代理都是不重复的。
1、首先我们设置好队列以及集合,如果队列是空的(已透支),则睡眠2秒等待插入。
ip_set = set()
que_proxy = Queue()
# 从队列获取有效代理
def useful_proxies():
while 1:
if not que_proxy.empty():
return que_proxy.get()
else:
print("queue empty. please wait for 2 second")
time.sleep(2)
2、接口获取代理插入队列(当然,接口自己填啦~)
# 获取代理IP
def get_proxies():
while 1:
text = requests.get('your proxies API').text
try:
ip = re.findall('(\d{2,3}.\d{2,3}.\d{2,3}.\d{2,3}:\d{4,5})', text)[0]
except:
ip = ''
if ip != '':
proxies = {
"http": "http://" + ip,
"https": "https://" + ip
}
# 未出现在旧集合,