开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 343|回复: 31
打印 上一主题 下一主题
收起左侧

[易语言纯源码] [AI]贝贝爱偷懒代理智能提取模块,高仿鱼刺爱偷懒代理提取

[复制链接]
结帖率:100% (27/27)
跳转到指定楼层
楼主
发表于 前天 13:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式   浙江省宁波市
分享源码
界面截图: -
是否带模块: 纯源码
备注说明: -
本帖最后由 韦贝贝 于 2026-7-31 13:10 编辑

起因是鱼刺的哪个模块老在那边空获取代理,代理被压入了也没开启验证,但是可用代理始终是0,导致代理白白的浪费几千,无奈之下让AI完全参考鱼刺爱偷懒的模块写了一个

全程靠 AI 搭框架写的,前后调了 5-6 次就跑通了,后续又针对性修复了几轮边界问题和性能问题,现在多线程压测稳定

一、模块核心功能
这是一个完整的代理提取 + 验证 + 池化管理模块,常用功能都覆盖了:

  • 支持最多 5 组代理提取地址,自动轮询提取
  • 支持「分隔符分割」和「正则匹配」两种解析方式,内置 IP: 端口格式合法性校验
  • 内置多线程验证池,可自定义验证地址、响应特征串、超时时间、失败重试次数
  • 代理生命值机制:单条代理可配置复用次数,用完自动从池中移除
  • 代理最长存活时间(MaxAge):到期自动清理过期代理
  • 两种获取模式:
    • 普通模式:自动扣减生命值,用完自动删除
    • Ex 自取出模式:代理从池中完全移出,自行判断有效性后手动归还
  • 支持自定义去重回调,可自行实现全局去重逻辑
  • 代理池低于阈值自动触发补充,提取最小间隔可配置,避免请求过快

二、开发 & 踩坑历程
全程 AI 辅助开发,踩的坑都是易语言多线程经典问题,这里也列出来给大家避坑:

  • 初稿成型:从 0 到 1 搭完整个模块框架,包括提取线程、验证线程、代理池管理、临界区保护,前后调试了 5-6 次就跑通了主流程,提取→验证→入池→获取全链路正常。
  • 修复 CPU 100% 问题:初期空转时 CPU 直接拉满,排查发现易语言自带的 延迟() 是忙等待实现,把所有线程内的等待全部替换成基于内核定时器的 程序_延时(),空闲 CPU 直接降到几乎为 0。
  • 修复数组越界崩溃:高并发下偶现下标越界,根源是「正向遍历数组 + 循环内删除成员」的写法有先天缺陷,把所有遍历删除的逻辑全部改成倒序变量循环,从根源上杜绝越界问题。
  • 修复生命值逻辑:理顺 获取代理Ex 的生命值机制,取出时自动扣减 1 点生命值,归还时自动过滤生命值≤0 的代理,和普通获取模式的逻辑对齐,避免代理无限复用。
  • 优化事件惊群:调整事件通知逻辑,只有代理池从空变非空时才触发事件,避免大量等待线程同时唤醒抢锁,减少无意义的 CPU 消耗。
  • 多线程压测验证:开满验证线程 + 多线程并发获取代理,连续跑数小时无崩溃、无内存泄漏、计数正常,确认稳定可用。

  
子程序名返回值类型公开备 注
多线程使用示例  
变量名类 型静态数组备 注
i整数型 
' 第一步:在主线程配置和创建
代理智能提取_置代理提取参数 (1, https://www.hibbba.com/, #换行符, 假, 真, 假, , 1000, , , , )
' 代理智能提取_置代理提取参数 (1, “https://www.hibbba.com/”, “(\d+.\d+.\d+.\d+):(\d+)”, 真, 真, 假, , 1000, , , , )
' 代理智能提取_置代理验证参数 (https://www.baidu.com/”, “html”, 真, 假, , “GET”, 100, 10, 1)
代理智能提取_置代理验证参数 (https://www.baidu.com/, “html”, 真, 假, , “GET”, 100, 10, 1)  ' URL填写 不验证 不进行验证直接使用
代理智能提取_置代理生命值 (5)  ' 每条代理会被获取1次
代理智能提取_置代理最长存活时间 (-1)  ' 不启用
' 如果需要 开启过滤重复回调 请再 代理智能提取_置代理验证参数 设置URL验证 取子程序地址 (回调子程序地址)
代理智能提取_置代理过滤重复回调 (到整数 (&过滤重复代理回调), )
代理智能提取_创建 ()
程序_延时 (2000)
' 第二步:启动10个工作线程
计次循环首 (1, i)
启动线程 (&自动_工作线程, i, )
' 启动线程 (&手动归还_工作线程, i, )
计次循环尾 ()
' 等待所有工作完成
程序_延时 (60000)
' 第三步:在主线程销毁
代理智能提取_销毁 ()
子程序名返回值类型公开备 注
自动_工作线程  
参数名类 型参考可空数组备 注
线程ID整数型
变量名类 型静态数组备 注
代理信息文本型 
bool逻辑型 
计次循环首 (100, )
' 代理智能提取创建完毕后 就可以愉快的调用`获取代理()`了
' 只要有需要 就可以随便调用
' 支持多线程并发调用获取
循环判断首 ()
bool = 代理智能提取_获取代理 (代理信息, 1000 × 10)
如果真 (bool = )
到循环尾 ()
输出调试文本 (“获取到代理: ” + 代理信息)
bool = 调用_干活 (代理信息)
循环判断尾 (bool = )
调试输出 (“代理智能提取_取已提取数 ()”, 代理智能提取_取已提取数 ())
调试输出 (“代理智能提取_取本次提取数 ()”, 代理智能提取_取本次提取数 ())
调试输出 (“代理智能提取_取当前剩余数 ()”, 代理智能提取_取当前剩余数 ())
调试输出 (“代理智能提取_取验证成功数 ()”, 代理智能提取_取验证成功数 ())
调试输出 (“代理智能提取_取正在验证数 ()”, 代理智能提取_取正在验证数 ())
' 输出调试文本 (“干活成功! 代理:” + 代理信息)
程序_延时 (1000)
计次循环尾 ()
子程序名返回值类型公开备 注
过滤重复代理回调逻辑型 注意:返回假=通过,返回真=重复丢弃
参数名类 型参考可空数组备 注
IP地址文本型
端口文本型
' ' 进入临界区,保证多线程下数组操作安全
' _临界进入 (去重临界区)
' ' 判断IP是否已经存在
' 如果真 (查找成员 (已加入IP数组, IP地址, , ) ≠ -1)如果真 ()
' _临界退出 (去重临界区)
' 返回 ()  ' 重复,丢弃
' ' 不重复,加入数组,放行
' 加入成员 (已加入IP数组, IP地址)
' _临界退出 (去重临界区)
' 返回 ()  ' 通过,允许入池
调试输出 (IP地址, 端口)
置随机数种子 ()
如果真 (取随机数 (1, 10) < 5)
返回 ()  ' 通过,允许入池
返回 ()  ' 重复,丢弃
子程序名返回值类型公开备 注
手动归还_工作线程  
参数名类 型参考可空数组备 注
线程ID整数型
变量名类 型静态数组备 注
代理信息文本型123.123.123.123:8888
代理相关信息代理智能提取信息 
bool逻辑型 
计次循环首 (100, )
' 有的时候 我们希望一条代理可以被使用多次
' 本模块提供了`代理生命值`配置项 可以配置提取到的代理每条能被获取多少次
' 比如:设置`代理生命值=100` 提取到的代理每一条都能被`代理智能提取_获取代理()`获取100次
' (但是) 那么问题来了 如果这条代理中途失效/超时了怎么办? 答案是尴尬的 依然还会被获取到 直到100次上线 内部代理池才会释放掉这条代理
' (不过呢) 接下来我们就可以解决这个问题
' 首先使用 `代理智能提取_获取代理Ex()` 来获取代理并接收代理相关信息
' 然后使这条代理去连接/访问/干活  自行判断这条代理是否已经失效
' [如果这条代理依然有效] 那就调用`代理智能提取_自压入代理Ex()`把这条代理归还给内部代理池
' [如果发现这条代理已失效/超时] 那就不用归还了 该干活干活 该获取新代理获取新代理继续干活
' //演示
调试输出 (“代理智能提取_取当前剩余数 ()”, 代理智能提取_取当前剩余数 ())
bool = 代理智能提取_获取代理Ex (代理信息, 代理相关信息, 1000 × 10)
调试输出 (bool)
如果真 (bool = )
输出调试文本 (“获取到代理: ” + 代理信息)
bool = 调用_干活 (代理信息)
' 返回真 说明代理还能用 还没失效
' 返回假 说明代理失效或超时
如果真 (bool = )
' 判断返回真 这条代理依然有效
' 归还此条代理到内部代理池中
' 这条代理只要生命值不被耗尽 依然还会提取到它
代理智能提取_自压入代理Ex (代理相关信息)

调试输出 (bool)
调试输出 (“代理智能提取_取当前剩余数 ()”, 代理智能提取_取当前剩余数 ())
调试输出 (bool)
调试输出 (“代理智能提取_取已提取数 ()”, 代理智能提取_取已提取数 ())
调试输出 (“代理智能提取_取本次提取数 ()”, 代理智能提取_取本次提取数 ())
调试输出 (“代理智能提取_取当前剩余数 ()”, 代理智能提取_取当前剩余数 ())
调试输出 (“代理智能提取_取验证成功数 ()”, 代理智能提取_取验证成功数 ())
调试输出 (“代理智能提取_取正在验证数 ()”, 代理智能提取_取正在验证数 ())
' 暂停 ()
程序_延时 (1000)
计次循环尾 ()
子程序名返回值类型公开备 注
调用_干活逻辑型 使用代理并判断这条代理是否失效
参数名类 型参考可空数组备 注
代理信息文本型
置随机数种子 ()
如果真 (取随机数 (1, 10) < 5)
返回 ()  ' 这条代理失效了 超时了 爆炸了
返回 ()  ' 还不错哦 这条代理依然还能用



i支持库列表   支持库注释   
EThread多线程支持库
spec特殊功能支持库






游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 1精币 +1 收起 理由
cui870222829 + 1 感谢分享,很给力!~

查看全部评分


结帖率:100% (3/3)

签到天数: 2 天

32
发表于 5 分钟前 | 只看该作者   贵州省贵阳市

回帖奖励 +6 枚 精币

46645656565154665654
回复 支持 反对

使用道具 举报

结帖率:96% (24/25)

签到天数: 2 天

31
发表于 2 小时前 | 只看该作者   广东省广州市

回帖奖励 +6 枚 精币

学习一下                 
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 1 天

30
发表于 昨天 23:06 | 只看该作者   四川省南充市

回帖奖励 +6 枚 精币

回复 支持 反对

使用道具 举报

签到天数: 1 天

29
发表于 昨天 21:51 | 只看该作者   江苏省连云港市

回帖奖励 +6 枚 精币

感谢分享
回复 支持 反对

使用道具 举报

签到天数: 1 天

28
发表于 昨天 19:10 | 只看该作者   贵州省黔西南布依族苗族自治州

回帖奖励 +6 枚 精币

大哥厉害
回复 支持 反对

使用道具 举报

签到天数: 1 天

27
发表于 昨天 16:28 | 只看该作者   河北省石家庄市

回帖奖励 +6 枚 精币

感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (38/38)

签到天数: 2 天

26
发表于 昨天 16:24 | 只看该作者   江西省赣州市

回帖奖励 +6 枚 精币

感谢分享
回复 支持 反对

使用道具 举报

签到天数: 1 天

25
发表于 昨天 16:12 | 只看该作者   陕西省西安市

回帖奖励 +6 枚 精币

感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (15/15)

签到天数: 1 天

24
发表于 昨天 15:49 | 只看该作者   广东省佛山市

回帖奖励 +6 枚 精币

感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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