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

使用Python urllib.request下载JSON速度过慢,如何进行提速?

原因分析

  • 缺少压缩请求头:浏览器发起请求时默认会携带Accept-Encoding头,告知服务器可以返回gzip/br等压缩格式的内容,你请求的SEC接口返回的JSON原始体积较大,压缩后体积仅为原始的1/10不到,而urllib默认不会主动携带该头,服务器会返回未压缩的原始数据,大幅增加了传输耗时。
  • urllib默认性能缺陷:原生urllib没有做连接复用、IO读取的相关优化,大文件读取时效率远低于成熟的第三方HTTP客户端。
  • 部分网络环境下urllib会默认走系统代理配置,额外增加了链路耗时。

优化方案

  1. 给请求添加压缩头,拿到响应后手动解压,示例代码如下:
import urllib.request
import gzip
from datetime import datetime

start = datetime.now()
user_agent = 'First Lastname abc@def.com'
url = 'https://data.sec.gov/submissions/CIK0000320193.json'
headers = {
    'User-Agent': user_agent,
    'Accept-Encoding': 'gzip, deflate, br' # 新增压缩头
} 

request = urllib.request.Request(url, None, headers) 
response = urllib.request.urlopen(request, timeout=10) # 加超时避免无意义等待
# 判断返回内容是否压缩,做对应解压处理
if response.info().get('Content-Encoding') == 'gzip':
    data = gzip.decompress(response.read())
else:
    data = response.read()
print(datetime.now() - start)
  1. 换用第三方HTTP库requests,库内部已经自动处理了解压、连接复用等逻辑,代码更简洁效率也更高,示例如下:
import requests
from datetime import datetime

start = datetime.now()
headers = {'User-Agent': 'First Lastname abc@def.com'}
resp = requests.get('https://data.sec.gov/submissions/CIK0000320193.json', headers=headers, timeout=10)
data = resp.content
print(datetime.now() - start)

优化后耗时基本可以和浏览器打开的速度对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:15:03