如何从目标网站仅提取IP地址与端口?
优化方案:仅提取IP与端口
原代码会把API返回的所有数据转成字符串保存,要实现只提取IP和端口,只需遍历返回的代理列表,精准取出每个代理的ip和port字段拼接即可,优化后的代码如下:
import requests url = "https://proxylist.geonode.com/api/proxy-list?limit=500&page=1&sort_by=lastChecked&sort_type=desc" session = requests.session() scraper = session.get(url) proxies = scraper.json()["data"] # 提取IP和端口,格式化为"ip:port" proxy_list = [] for proxy in proxies: # 将端口转为字符串,避免拼接时类型报错 ip_port = f"{proxy['ip']}:{str(proxy['port'])}" proxy_list.append(ip_port) # 写入文件,每行一个代理地址 with open(r"C:\Users\chris\OneDrive\Desktop\misc\a\hello.txt", "w", encoding="utf-8") as file: file.write("\n".join(proxy_list))
关键改动说明
- 放弃把整个
data转成字符串的操作,改为遍历每个代理字典,精准提取目标字段 - 用
f-string拼接成ip:port的通用格式,同时把API返回的数字类型端口转为字符串,避免拼接报错 - 使用
with语句管理文件操作,自动处理文件关闭,比手动open/close更安全稳妥
可选优化:增加异常兼容
如果API返回的部分代理数据缺失ip或port字段,可以添加判断逻辑避免程序报错:
proxy_list = [] for proxy in proxies: # 先检查字段是否存在,再提取 if "ip" in proxy and "port" in proxy: ip_port = f"{proxy['ip']}:{str(proxy['port'])}" proxy_list.append(ip_port)
内容的提问来源于stack exchange,提问作者GReat
相关产品推荐
相关产品推荐

