Python怎么批量查IP_多线程并发查询海量IP网络归属地运营商并导出到CSV

应使用 ThreadPoolExecutor(max_workers=10–20) 控制并发,避免直接创建大量线程;优先选用 ipapi.co 或 ipinfo.io 等稳定 API 并设置 timeout 和重试;CSV 导出采用流式写入并规范编码与空值处理。

concurrent.futures.ThreadPoolExecutor 控制并发数,别直接开几百个线程

Python 默认的 threading 没有内置并发数限制,一上来就 for ip in ips: Thread(...).start() 容易把系统拖慢、触发 API 限流甚至被封 IP。真实场景下,10–50 个线程足够压满大多数 HTTP 查询瓶颈,再往上吞吐不增反降。

实操建议:

  • ThreadPoolExecutor(max_workers=20) 稳住并发节奏,max_workers 建议从 10 试起,观察 CPU/网络占用和响应延迟
  • 每个线程内必须加 try/except 包住请求逻辑,否则一个失败会中断整个线程池
  • 避免在 submit() 里传入未序列化的对象(比如带 socket 或文件句柄的类实例),只传纯数据和函数
  • 别用 map() 直接喂大列表——内存扛不住;改用 as_completed() 流式收结果

选对 API:优先用 ipapi.coipinfo.io,别硬啃 ip-api.com 免费版

ip-api.com 免费接口每分钟 45 次请求,超限返回 403 Forbidden,且不支持 HTTPS 批量头,实际跑批量时大概率卡死。而 ipapi.co 免费档允许 1000 次/天(需注册拿 token),返回字段全、结构稳定;ipinfo.io 则连 token 都不用,但每小时限 50000 次,IP 多了也得自己控速。

实操建议:

  • 调用前拼 URL 要严格:比如 https://ipapi.co/{ip}/json/,别漏斜杠或大小写错成 /JSON/
  • 务必加 timeout=(3, 7)(连接 3 秒,读取 7 秒),防止某个 IP 死等拖垮整批
  • 对空响应或 429 Too Many Requests,要 sleep 随机秒数再重试,别固定等 1 秒
  • 拿到 JSON 后先检查 response.get('country_name') 是否为 None,有些 IP(如内网、保留段)根本没归属地

导出 CSV 用 csv.writer 写行,别用 pandas.DataFrame.to_csv 加载全量内存

查 10 万 IP 的结果如果全塞进 DataFrame 再一次性 to_csv,内存轻松破 2GB,还容易因某列类型推断错导致编码异常(比如把 "CN" 当数字转成 NaN)。而流式写 CSV 只占几 MB 内存,且可控格式。

AI帮个忙

多功能AI小工具,帮你快速生成周报、日报、邮、简历等

下载

实操建议:

  • 打开文件用 open(... , newline='') ,Windows 下漏 newline='' 会导致空行
  • writer.writerow([ip, data.get('country_name', ''), data.get('org', '')]) 显式控制字段顺序和空值填充
  • 别在循环里反复 open(..., 'a') 追加——磁盘 IO 拖垮性能;一次性打开写入
  • 中文字段导出前确认终端或 Excel 能识别 UTF-8 BOM,必要时开头写 \ufeff

处理异常 IP 和网络抖动:记录失败日志比抛错更重要

海量 IP 里总有私有地址(10.0.0.0/8)、保留地址(0.0.0.0127.0.0.1)、超长响应或 DNS 解析失败,这些不是代码 bug,是数据常态。硬抛错会让整批中断,而静默跳过又没法回溯问题源头。

实操建议:

  • 单独开个 failed.log 文件,每行记 f"{ip}\t{error_type}\t{str(e)}",用 tab 分隔方便后续 awk 或 Excel 查看
  • socket.gaierror(DNS 失败)和 requests.exceptions.ConnectionError 区分对待:前者可跳过,后者可能需换代理或重试
  • 最终 CSV 里失败的 IP 行不要留空字段,统一填 "N/A""INVALID",避免下游解析误判为缺失值
  • 跑完后用 grep -c "N/A" output.csv 快速估算失败率,超过 5% 就该查是不是并发太高或 API 凭证失效了

事情说清了就结束。真正卡住你的往往不是语法,而是并发节奏没控好、API 返回字段没兜底、CSV 写法和编码混在一起——这三处一错,跑一晚上也白搭。

相关推荐:

Trae的AI能帮忙做接口的并发压力测试脚本编写吗?

可采用四种方法生成压力测试脚本:一、Python+Locust编写可调试脚本;二、JMeter+CSV生成jmx参数化脚本;三、k6生成ES6轻量脚本用于CI/CD;四、curl+parallel命令行快速验证接口吞吐。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 如果您希望使用Trae的AI辅助生成接口并发压力测试脚本,但发现其未直接输...
· AI · 266458

通义万象API并发调用限制是多少?高并发场景下的解决方案

通义万象API出现429错误时,应先确认模型并发阈值(如wanx-v1为10 QPS、wan2.6-t2v为5 QPS),再通过切换低敏感模型、降低输出分辨率、禁用高级特性、客户端信号量限流及动态错峰调度等五类方法协同应对。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 如果您调用通义万象API时遇到“429 Too Many Reques...

谷歌浏览器怎么配置下载任务的并发连接数_谷歌浏览器自带下载器极限提速

Chrome下载速度未达带宽上限主因是默认单连接策略,可通过启用并行下载、禁用QUIC、优化DNS、外接Aria2及关闭后台干扰五步优化。 如果您在使用谷歌浏览器下载文件时发现速度未达网络带宽上限,很可能是其默认下载器采用单连接或低并发策略所致。Chrome 自带下载器的并发行为受实验性标志、协议栈配置及系统级资源调度共同影响。以下是可直接生效的多种配置路径: 一、启用并行下载功能(官方内置多线程...

千问API的并发限制是多少?高并发调用的限流策略与解决方案

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 如果您调用通义千问API时遭遇请求被拒绝、返回“RateLimitExceeded”错误或响应头中包含Retry-After字段,则极有可能已触及当前账号或模型的并发调用限制。以下是应对该问题的多种可行方案: 一、确认当前所用模型及对应并发配额标准 通义千问的并发限制以每分钟调用次数(QPM)和...

QClaw怎么处理多线程和并发代码?Java并发编程辅助效果

QClaw通过融合JMM、线程生命周期及企业级并发模式知识图谱,提供线程安全集合选型、读写锁智能推荐与ThreadPoolExecutor动态配置三大能力,精准支撑Java并发开发。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 如果您在Java项目中需要编写多线程与并发代码,但面临线程安全、锁机制选择、线程池配置或死锁排查等复杂问题,则可...
· AI · 14301

Qoder 更新日志解读:V4.5 版本中关于多线程处理的重大改进

Qoder V4.5通过四项改进优化多线程性能:一、启用协程调度器降低上下文切换开销;二、配置线程亲和性绑定保障关键Agent响应稳定;三、重构工具链实现不可变参数与状态隔离;四、增强中断信号穿透确保全栈资源清理。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 如果您在使用 Qoder 进行高并发代码开发或大规模项目构建时遇到线程阻塞、资源...
· AI · 273045

谷歌浏览器下载速度慢怎么解除限制_谷歌浏览器多线程下载开启

谷歌浏览器下载慢是因默认单连接,需启用chrome://flags/#enable-parallel-downloading并重启;Edge同理;还可禁用QUIC、启用预连接;进阶可用Aria2接管下载。 如果您在使用谷歌浏览器下载文件时发现速度明显低于网络带宽上限,且未出现明显卡顿或中断,则很可能是浏览器默认启用单连接下载机制所致。以下是解除该限制、激活多线程并行下载能力的具体操作路径: 一、通...

安卓手机如何清理小红书/知乎占用的海量缓存数据【技巧】

若小红书或知乎导致手机存储减少、卡顿,主因是缓存堆积;可通过App内“存储空间”或“清除缓存”功能清理,关闭自动下载与预加载,手动删除Android/data下对应缓存目录,或系统设置中强制清除缓存与数据。 如果您在使用小红书或知乎时发现手机存储空间异常减少、应用启动变慢或频繁卡顿,则很可能是这两款应用长期运行所积累的缓存数据所致。这些缓存包含缩略图、预加载视频帧、评论图片、本地下载内容及数据库日...