загрузка данных с FTP-ссылки с аутентификацией - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь загрузить данные с сайта ниже, используя python.

ftp: //chain.physics.unb.ca/gps/data/nvd/

Когда я открываю ссылку в браузере, я перенаправлен на страницу ниже.

У меня есть соответствующие учетные данные для доступа к данным. После ввода учетных данных я перехожу на следующую страницу. Я перехожу на следующую страницу.

Получив доступ к этой странице, я могу l oop просмотреть URL-адрес и использовать библиотеку wget для загрузки необходимых данных. URL-адрес файла данных выглядит следующим образом: ftp: //chain.physics.unb.ca/gps/data/nvd/arvc/2017/03/arvc060B.17_.gz.

Полагаю, что я могу взять его со страницы данных с соответствующим l oop, чтобы перемещаться по данным с помощью URL. У меня действительно тяжелые времена, когда я пытаюсь пройти через страницу Credential по URL с протоколом FTP.

Пожалуйста, сообщите.

1 Ответ

0 голосов
/ 11 марта 2020

Что-то вроде этого, возможно?

# write all files in one folder, with formatted date and time, to a text file...
import ftplib
import datetime 
from datetime import datetime 

ftp = ftplib.FTP('ftp.yours.com', 'u_name', 'pswd')  

#ftp.nlst()
#directory = ftp.nlst('/emm1/')

ftp.cwd('')
ftp.retrlines('LIST')  

filenames = []  
ftp.retrlines('NLST', filenames.append)  

# writes file name and modified date and file size.
with open('C:\\your_path\\test.txt', 'w')  as f:
    for filename in filenames:  
        datetimeftp = ftp.sendcmd('MDTM ' + filename)
        modifiedTimeFtp = datetime.strptime(datetimeftp[4:], "%Y%m%d%H%M%S").strftime("%d %b %Y %H:%M:%S")
        size = ftp.size(filename)
        filesize = "{:.2f}".format(size/(1024))
        f.write(filename)
        f.write(':')
        f.write(modifiedTimeFtp)
        f.write(':')
        f.write(filesize + ' KB')
        f.write('\n')
f.close()

Или, может быть, это?

import ftplib
from ftplib import FTP
ftp = FTP()
from datetime import datetime


filenames = []
data = []

ftp = ftplib.FTP('ftp.anything.com', 'u_name', 'ps_wd')  


def get_dirs_ftp(folder=""):
    contents = ftp.nlst(folder)
    folders = []
    for item in contents:
        if "." not in item:
            folders.append(item)
    return folders
def get_all_dirs_ftp(folder=""):
    dirs = []
    new_dirs = []
    new_dirs = get_dirs_ftp(folder)
    while len(new_dirs) > 0:
        for dir in new_dirs:
            dirs.append(dir)

        old_dirs = new_dirs[:]
        new_dirs = []
        for dir in old_dirs:
            for new_dir in get_dirs_ftp(dir):
                new_dirs.append(new_dir)
    dirs.sort()
    return dirs

#allfiles = []
# get parent and child folders in directory
all_dirs = get_all_dirs_ftp()

# create a list to append metadata
dir_list = []

for dir in all_dirs:
    ftp.cwd('/'+dir+'/')
    print(dir)
    dir_list.append(dir)
    ftp.dir(dir_list.append)

    len(dir_list)


# you probably want to dump the results to a file...
outF = open('C:/your_path/filenames.csv', 'w')
for line in dir_list:
  # write line to output file
  outF.write(line)
  outF.write("\n")
outF.close()
print('Done!!')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...