吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5598|回复: 36
收起左侧

[Python 原创] 一个很少人用的功能,但非常实用

[复制链接]
lizy169 发表于 2023-2-21 22:02
本帖最后由 lizy169 于 2023-2-24 22:33 编辑

才疏学浅,习惯了潜水
再不冒泡,担心被吾爱开除
不说废话,直接上代码
抛砖引玉,有请大神献上更优雅方法
增加说明:
看了楼下童鞋的回复,可能是我说得不够明白;
以下代码在用于在某些频繁的网络操作的时候,IP经常会被屏蔽一段时间,屏蔽就中断出错,要手动重来,该思路用于IP被屏蔽后,自动循环切换IP,直到你程序自动完成不崩溃;
至于IP怎样获取,各又各的方法,这里就不说了
下面示例用的while循环,是为了各位童鞋便于理解,我实际用的是for循环;
各位童鞋可根据自己的需要编写自己的代码
我来吾爱的时候,是一张白纸,也就是小白,现在依然是小白
期望得到大神的指点,和童鞋们一起进步.......

[Python] 纯文本查看 复制代码
import time

ip_list = ['ip1', 'ip2', 'ip3']
ip_iter = iter(ip_list)
IP = next(ip_iter)
while True:
    try:
        print(IP)
        d = "a" + 1  # 故意设置的出错代码
        time.sleep(1)
    except:
        print('IP出错, 使用下一个IP地址')
        if IP == ip_list[-1]:
            ip_iter = iter(ip_list)
            IP = next(ip_iter)
        else:
            IP = next(ip_iter)
        print(IP)
        time.sleep(1)

免费评分

参与人数 5吾爱币 +3 热心值 +3 收起 理由
DChen + 1 热心回复!
yufan1123 + 1 谢谢@Thanks!
ysy2001 + 1 + 1 谢谢@Thanks!
zhangxiaoxiao + 1 谢谢@Thanks!
YuanFang0w0 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

侃遍天下无二人 发表于 2023-2-21 22:16
本帖最后由 侃遍天下无二人 于 2023-2-21 22:17 编辑

ip格式错误是这样判断的吗?你那里出错的原因是字符和整数不能相加,而不是ip错误吧?还有为啥连怎么获取ip都没写,补上
自己花钱买注册码潜水不会被开除,乱灌水才有风险
pjy612 发表于 2023-2-23 12:13

有时候自重试啥的。
如果语言支持的话 我选择用goto... 然后 try 外 放个 label.
在指定计数内 goto到顶部重试,catch 中 次数没超就goto, 超了就放行或者别的。
连 while 都省了...
帝玄奥懿 发表于 2023-3-26 00:40
给你一个IP池参考
该实现使用 requests 库从免费代{过}{滤}理 IP 网站获取 IP 地址,并将其存储在 ip_list 中。然后,它使用多线程检查 IP 地址的可用性。每个线程从 ip_list 中获取一个 IP 地址,使用 requests 库测试该 IP 地址是否可用。如果 IP 地址可用,则将其打印出来。
要使用该实现,请创建一个 IP_Pool 对象并调用 run() 方法。该方法将启动多个线程来检查 IP 地址的可用性。在 run() 方法中,您可以更改线程数,
[Python] 纯文本查看 复制代码
import requests
import threading

class IP_Pool:
    def __init__(self):
        self.ip_list = []  # 存储 IP 地址的列表
        self.lock = threading.Lock()  # 线程锁,用于多线程操作时的同步

    def get_ip(self):
        url = 'http://www.89ip.cn/tqdl.html?api=1&num=20&port=&address=&isp='  # 获取 IP 地址的网址
        response = requests.get(url)  # 发送 GET 请求获取网页内容
        ips = response.text.split('<br>')[:-1]  # 将网页内容按照 <br> 分割成 IP 地址列表
        for ip in ips:
            self.ip_list.append(ip)  # 将 IP 地址添加到列表中

    def test_ip(self, ip):
        proxies = {
            'http': 'http://' + ip,
            'https': 'https://' + ip
        }  # 构造代{过}{滤}理字典
        try:
            response = requests.get('http://www.baidu.com', proxies=proxies, timeout=5)  # 使用代{过}{滤}理访问百度网站
            if response.status_code == 200:  # 如果返回状态码为 200,则说明代{过}{滤}理可用
                with self.lock:
                    print(ip + ' is available')  # 打印可用的 IP 地址
        except:
            pass

    def check_ip(self):
        while True:
            with self.lock:
                if len(self.ip_list) == 0:  # 如果 IP 地址列表为空,则退出循环
                    break
                ip = self.ip_list.pop()  # 从 IP 地址列表中取出一个 IP 地址
            self.test_ip(ip)  # 测试该 IP 地址是否可用

    def run(self):
        self.get_ip()  # 获取 IP 地址列表
        threads = []
        for i in range(10):  # 创建 10 个线程
            t = threading.Thread(target=self.check_ip)  # 每个线程执行 check_ip 方法
            threads.append(t)
            t.start()
        for t in threads:
            t.join()  # 等待所有线程执行完毕

if __name__ == '__main__':
    pool = IP_Pool()
    pool.run()  # 运行 IP 池实现

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
lizy169 + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| lizy169 发表于 2023-2-21 22:26
侃遍天下无二人 发表于 2023-2-21 22:16
ip格式错误是这样判断的吗?你那里出错的原因是字符和整数不能相加,而不是ip错误吧?还有为啥连怎么获取ip ...

不是乱灌水啊
日常应用中,在使用其中一个I%P线路时,经常出现未知错误导致程序崩溃,
这种方式可以自动切换下一个I%P线路执行,一直循环.......

点评

那也不对,既然经常会出问题,那正常情况下至少要形成ip池同时和多个ip建立连接吧?其他业务通过ip池取得连接和服务器通信,这些你也没写呀  详情 回复 发表于 2023-2-21 22:55
侃遍天下无二人 发表于 2023-2-21 22:55
lizy169 发表于 2023-2-21 22:26
不是乱灌水啊
日常应用中,在使用其中一个I%P线路时,经常出现未知错误导致程序崩溃,
这种方式可以自 ...

那也不对,既然经常会出问题,那正常情况下至少要形成ip池同时和多个ip建立连接吧?其他业务通过ip池取得连接和服务器通信,这些你也没写呀
YuanFang0w0 发表于 2023-2-21 22:55
这个思路挺好的 ,比如爬虫的时候,你这个IP访问过多被绊了,然后请求出错,自动切换IP再次请求咯
QingTianGG 发表于 2023-2-21 23:09
迭代器,几乎没有用过
我感觉for  in可以解决呢
 楼主| lizy169 发表于 2023-2-21 23:13
YuanFang0w0 发表于 2023-2-21 22:55
这个思路挺好的 ,比如爬虫的时候,你这个IP访问过多被绊了,然后请求出错,自动切换IP再次请求咯

嗯嗯,我也是遇到这个问题,才想的这个办法.........
 楼主| lizy169 发表于 2023-2-21 23:32
这种方法如果遇到第一个Ip运行出错,第二个ip又连续出错,程序一样挂,谁有好的方法共享?多几个try?
不会想象的明天 发表于 2023-2-22 00:32
爬虫………额&#128531;,有点东西!
cao884 发表于 2023-2-22 00:40
不错不错,学习借鉴下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表