如何将proxybroker异步返回的代理对象转换为普通列表
你可以通过新增列表变量在异步采集过程中存储代理对象,最终就能直接得到普通列表格式的结果,修改后的代码如下:
import asyncio from proxybroker import Broker async def collect_proxies(proxies, proxy_list): while True: proxy = await proxies.get() if proxy is None: break # 如需仅存储IP端口字符串,替换为 proxy_list.append(f"{proxy.host}:{proxy.port}") proxy_list.append(proxy) print('Found proxy: %s' % proxy) async def main(): proxies = asyncio.Queue() broker = Broker(proxies) # 初始化空列表用于存储最终结果 result_proxies = [] tasks = asyncio.gather( broker.find(types=['HTTP', 'HTTPS'], limit=10), collect_proxies(proxies, result_proxies) ) await tasks return result_proxies if __name__ == "__main__": loop = asyncio.get_event_loop() # final_proxies 就是转换完成的普通列表 final_proxies = loop.run_until_complete(main()) # 可以直接按普通列表的方式操作 print(f"采集完成,共得到{len(final_proxies)}个代理") print(final_proxies)
额外说明:
- 原代码中的
show函数仅做打印输出,替换为collect_proxies后会把每一个抓取到的代理对象追加到传入的列表中 - 所有异步任务执行完毕后,列表就已经填充完成,不需要额外做异步结果到普通列表的转换操作
- 你可以根据需求调整存入列表的内容,比如只存IP端口、同时存代理类型等,都可以直接操作proxy对象的对应属性完成
内容的提问来源于stack exchange,提问作者user40780
相关产品推荐
相关产品推荐

