多线程代理ip验证(requests)

本文通过代码展示了如何使用Python的多线程进行代理IP的验证,可以参考作者之前的相关多线程爬虫案例进行深入学习。
摘要由CSDN通过智能技术生成

直接上代码:

import requests
from queue import Queue
import threading


class proxy_ip():
    # 初始化参数
    def __init__(self):
        self.url = 'http://www.baidu.com/'
        self.ip_list_queue = Queue()  # 创建队列用于存储所有代理
        self.proxy_queue = Queue()  # 创建存储有效代理

    # 获取代理ip
    def get_ip(self):
        # 这是我之前采集到代理ip存放在txt中,格式是ip:port
        with open('./ip.txt') as f:  
            ip_list = f.readlines()
        for ip in ip_list:
            ip = ip.strip()
            # proxy = {"http":"http://" + ip,"https":"http://" + ip,}
            self.ip_list_queue.put(ip)  # 存放到队列

    # 验证代理ip
    def check_ip(self):
        while True:
            ip = self.ip_list_queue.get()  # 在队列中取proxy
            try:
                proxy = {"http": "http://" + ip}
                requests.get(self.url, proxies=proxy, timeout=1)
                ip = ip
                print(ip)
            except:
                ip = None
            finally:
                self.proxy_queue.put(ip)  # 存入队列
            self.ip_list_queue.task_done()  # 队列计数减一

    # 写入可用ip
    def write_ip(self):
        while True:
            ip = self.proxy_queue.get()  # 取
            if ip is not None:
                with open('./proxy.txt', 'a') as f:
                    f.write(ip + '\n')
            self.proxy_queue.task_done()  # 减

    # 运行主逻辑
    def run(self):
        thread_list = []
        t_get_ip = threading.Thread(target=self.get_ip)
        thread_list.append(t_get_ip)
        for i in range(30):
            t_check_ip = threading.Thread(target=self.check_ip)
            thread_list.append(t_check_ip)
        t_write_ip = threading.Thread(target=self.write_ip)
        thread_list.append(t_write_ip)
        for t in thread_list:
            t.setDaemon(True)  # 守护线程
            t.start()
        for q in [self.ip_list_queue, self.proxy_queue]:
            q.join()
        print('运行结束')


if __name__ == '__main__':
    start = proxy_ip()
    start.run()

多线程学习看我之前的案列

多线程爬虫案例(浅)一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值