基本上我正在处理一个 python 项目,我从 sec edgar 数据库下载和索引文件。然而,问题是使用请求模块时,将文本保存在变量中需要很长时间(一个文件在 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)
Run Code Online (Sandbox Code Playgroud)
谢谢!
小智 11
我发现的是在代码中r.text,特别是当没有给出编码时( r.encoding == 'None' )。检测编码所花费的时间为 20 秒,我可以通过定义编码来跳过它。
...
r.encoding = 'utf-8'
...
Run Code Online (Sandbox Code Playgroud)
就我而言,我的请求没有返回编码类型。响应大小为 256k,r.apparent_encoding耗时 20 秒。
查看文本属性函数。它测试以查看是否存在encoding。如果有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())
Run Code Online (Sandbox Code Playgroud)
当然,输出可能会在打印中丢失,所以我建议你在交互式 shell 中运行上面的内容,它可能会变得更加明显,即使没有打印也会浪费时间 datetime.now()
| 归档时间: |
|
| 查看次数: |
9507 次 |
| 最近记录: |