如何在文件下载期间迭代Url以捕获所有和后续文件

2024-05-15 11:47:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从一个目录下载文件,所有文件的url中唯一的区别是中间的日期(https://eogdata.mines.edu/wwwdata/viirs_products/vnf/v30/VNF_j01_d20180607_noaa_v30-ez.csv.gz),我希望能够增加和迭代日期,这样我将只提供一个更改日期的url。这是为了避免向代码提供超过500个url。到目前为止,我只能下载一个文件

import urllib.request
testfile = urllib.request.URLopener()
testfile.retrieve("https://eogdata.mines.edu/wwwdata/viirs_products/vnf/v30/VNF_j01_d20180607_noaa_v30-ez.csv.gz",
                  "C:/users/user 1/Desktop/20180607.gz")

Tags: 文件httpsurlproductsedugzj01vnf
1条回答
网友
1楼 · 发布于 2024-05-15 11:47:08

这里有一个看起来很有前途的方法(我不是专家)。它使用re正则表达式模块来解析request.urlopen()响应中的行,并查找括在双引号中的带引号的文件名,这些文件名包含类似日期的内容,并以字符'.gz'结尾:

import re
from urllib import request
from urllib.error import HTTPError

MAXLINES = 20  # To limit number of lines read - set to zero to disable.

directory = 'https://eogdata.mines.edu/wwwdata/viirs_products/vnf/v30'
pattern = re.compile(r""" "(\S*(\d{4} 0[1-9]|1[012] [012][0-9]|3[01])\S*\.gz)" """,
                     re.VERBOSE)
try:
    with request.urlopen(directory) as response:
        for i, line in enumerate(response, 1):
            match = pattern.search(line.decode('utf-8'))
            if match:
                print(match.group(1))  # Print matching filename.
            if MAXLINES and i > MAXLINES:  # Stop early? (for testing)
                break
except HTTPError as e:
    print('Failed to open directory')
    print('Reason: ', e.reason)

相关问题 更多 >