python - 加速 BeautifulSoup 解析?
问题描述
我需要处理来自这个网站的天气数据(https://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.20190814/06/),每个文件大约 300MB。下载文件后,我只需要读取其中的一个子集。我认为下载它会太慢,所以我打算使用 BeautifulSoup 直接从网站读取数据,像这样
from bs4 import BeautifulSoup
import requests
url = 'https://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.20190814/06/gfs.t06z.pgrb2.0p25.f000'
response = requests.get(url)
soup = BeautifulSoup(response.content, features='lxml')
然后使用该pygrib
库读取生成的 .grib(一种天气数据格式)文件的子集。然而,这也被证明太慢了,每天需要完成 50 次的事情大约需要 5 分钟。有没有我没有想到的更快的选择?
解决方案
您可以做的是下载匹配.idx
文件,该文件为您提供主文件中的偏移量和大小。然后,您可以识别您需要的文件部分,并使用已接受的答案中提到的技术仅使用 python 请求下载文档的一部分以获取这些位。
您可能需要做一些额外的处理才能使用pygrib
最简单的选项来读取它,这可能是下载文件头和您感兴趣的位,并将它们组合成一个带有您不感兴趣的填充的单个文件。
顺便说一句,您根本不需要 Beautiful Soup 处理!响应content
部分是您所追求的数据。requests.get
附加信息:
从评论:
对于将来遇到此问题的任何人,对于 grib 文件,这是我发现的这个概念的工作大纲:gist.github.com/blaylockbk/...</a> – PV
推荐阅读
- file - 如何提交以强制执行非英文文件?
- ios - 在 React Native 中使用 nativeID/使用 RCTRootView 子视图的正确方法是什么?
- python - 启动 cmd 并在创建的 cmd 实例中运行多个命令
- javascript - HTML FORM - 使用 onchange() 更改部分只读字符串字段
- javascript - 从动态表单字段创建对象列表
- python - 为什么访问 numpy 数组比使用 Cython 的 Pillow 图像慢 6 倍
- elasticsearch - 如何根据其他字段的值在摄取文档上添加新字段?
- c - 将二进制转换为十六进制数字系统的C程序
- python - 有没有一种更快的方法来使用 mibian 模块计算 csv/xl 文件中数百万行的隐含波动率?
- c# - 选择的库禁用 ASP.NET MVC 中 DropDownList 的验证