Как я могу перебрать URL для захвата всех и последующих файлов во время загрузки файла - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь загрузить файлы из каталога, единственная разница в 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")

1 Ответ

0 голосов
/ 29 июня 2019

Вот что-то вроде многообещающего подхода (я не эксперт). Он использует модуль регулярного выражения 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...