Python Requests花费很长时间
Python Requests花费很长时间
基本上,我正在处理一个Python项目,其中我从SEC Edgar数据库下载和索引文件。但问题在于,使用 requests 模块时,将文本保存在变量中需要很长时间(一个文件在大约 130 至 170 秒之间)。
该文件大约有 1600 万个字符,我想知道是否有任何方法可以轻松地降低检索文本所需的时间。-- 示例:
import requests url ="https://www.sec.gov/Archives/edgar/data/0001652044/000165204417000008/goog10-kq42016.htm" r = requests.get(url, stream=True) print(r.text)
谢谢!
admin 更改状态以发布 2023年5月23日
我的发现是在代码 r.text
中,特别是当没有给定编码时 ( r.encoding == 'None' )。检测编码花费的时间为 20 秒,我可以通过定义编码来跳过它。
... r.encoding = 'utf-8' ...
额外的细节
我的情况是,我的请求没有返回编码类型。响应大小为 256k,r.apparent_encoding
花费了 20 秒。
查看 text 属性函数。它会检查是否有编码。如果是 None
,则会调用 apperent_encoding
函数来扫描文本以自动检测编码方案。
在长字符串上,这需要时间。通过定义响应的编码(如上所述),您将跳过检测。
验证这是否是您的问题
在上面的示例中:
from datetime import datetime import requests url = "https://www.sec.gov/Archives/edgar/data/0001652044/000165204417000008/goog10-kq42016.htm" r = requests.get(url, stream=True) print(r.encoding) print(datetime.now()) enc = r.apparent_encoding print(enc) print(datetime.now()) print(r.text) print(datetime.now()) r.encoding = enc print(r.text) print(datetime.now())
当然输出可能会在打印时失去,所以我建议您在交互式 shell 中运行上面的代码,即使没有打印 datetime.now()
,您也可能更清楚地知道您正在失去时间的地方。