You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过多线程处理URL列表 加速waybackpy获取Wayback Machine归档链接

优化后的waybackpy多线程获取归档地址方案

以下是可直接运行的修正代码:

import waybackpy
import concurrent.futures

# 自定义User-Agent,Wayback Machine要求必须提供合法UA,可按实际使用场景修改
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
url_list = ["https://www.google.com", "https://www.facebook.com", "https://www.wikipedia.com", "https://www.walmart.com/", "https://www.ebay.com/", "https://www.amazon.com"]

# 单条URL的处理逻辑,作为最小任务单元分配给线程
def get_single_archive_url(url):
    try:
        target_url = waybackpy.Url(url, USER_AGENT)
        newest_archive = target_url.newest()
        # 返回元组区分正常结果和错误,方便后续分类处理
        return (url, str(newest_archive), "success")
    except Exception as e:
        return (url, None, f"error: {str(e)}")

if __name__ == "__main__":
    archive_url_list = []
    # max_workers设置并发线程数,IO密集型任务可设为2-10,根据自身网络情况调整
    with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
        # map方法自动将url_list中的每个url分配给空闲线程,不需要手动拆分列表
        results = executor.map(get_single_archive_url, url_list)
    
    # 统一处理所有返回结果
    for res in results:
        archive_url_list.append(res)
        if res[2] == "success":
            print(f"{res[0]} 归档地址:{res[1]}")
        else:
            print(f"{res[0]} 获取失败:{res[2]}")
    
    print("所有任务处理完成")

核心调整说明

  • 修正任务分配逻辑:原代码将整个URL列表遍历逻辑作为单个任务提交给线程,本质还是单线程运行。现在将单条URL的归档查询逻辑封装为独立函数,ThreadPoolExecutor的map方法会自动遍历URL列表,把每个URL分配给空闲线程执行,不需要手动拆分列表,自动实现并发。
  • 修复缺失依赖与变量:补全concurrent.futures导入,定义合法的User-Agent(Wayback Machine会拦截无合法UA的请求),规避全局变量的线程安全问题。
  • 优化异常处理:单条URL请求失败时仅返回错误标记,不会中断其他URL的处理,也不会导致线程提前退出。

内容的提问来源于stack exchange,提问作者Lee Roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:06:02