首页 > 解决方案 > 加速 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 分钟。有没有我没有想到的更快的选择?

标签: pythonbeautifulsoup

解决方案


您可以做的是下载匹配.idx文件,该文件为您提供主文件中的偏移量和大小。然后,您可以识别您需要的文件部分,并使用已接受的答案中提到的技术仅使用 python 请求下载文档的一部分以获取这些位。

您可能需要做一些额外的处理才能使用pygrib最简单的选项来读取它,这可能是下载文件头和您感兴趣的位,并将它们组合成一个带有您不感兴趣的填充的单个文件。

顺便说一句,您根本不需要 Beautiful Soup 处理!响应content部分是您所追求的数据。requests.get

附加信息:

从评论:

对于将来遇到此问题的任何人,对于 grib 文件,这是我发现的这个概念的工作大纲:gist.github.com/blaylockbk/...</a> – PV


推荐阅读