Python загрузка нескольких файлов в цикле for - PullRequest
0 голосов
/ 26 мая 2020

У меня есть список URL-адресов, которые ведут к файлам из SE C (например, https://www.sec.gov/Archives/edgar/data/18651/000119312509042636/d10k.htm)

Моя цель - написать a для l oop который открывает URL-адреса, запрашивает документ и сохраняет его в папку. Однако мне нужно будет позже идентифицировать документы. Вот почему я хотел использовать "htps: //www.sec.gov/Archives/edgar/data/18651/000119312509042636/d10k.htm" этот регистрационный c номер в качестве имени документа

directory = r"\Desktop\10ks"
for url in url_list:
    response = requests.get(url).content
    path = (directory + str(url)[40:-5] +".txt")
    with open(path, "w") as f:
        f.write(response)
    f.close()

Но каждый раз , Я получаю следующее сообщение об ошибке: filenotfounderror: [errno 2] нет такого файла или каталога:

Я очень надеюсь, что вы можете мне помочь !! Спасибо

Ответы [ 2 ]

0 голосов
/ 26 мая 2020
import requests
import os
url_list = ["https://www.sec.gov/Archives/edgar/data/18651/000119312509042636/d10k.htm"]
#Create the path Desktop/10ks/
directory = os.path.expanduser("~/Desktop") + "\\10ks"
for url in url_list:
    #Get the content as string instead of getting it as bytes
    response = requests.get(url).text
    #Replace slash in filename with underscore
    filename = str(url)[40:-5].replace("/", "_")
    #print filename to check if it is correct
    print(filename)
    path = (directory + "\\" + filename +".txt")
    with open(path, "w") as f:
        f.write(response)
    f.close()

См. Комментарии. Я думаю, что обратная косая черта в именах файлов недопустима, поскольку

filename = str(url)[40:-5].replace("/", "\\")

дает мне

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\user/Desktop\\10ks\\18651\\000119312509042636\\d10.txt'

См. Также:
https://docs.python.org/3/library/os.path.html#os .path.expanduser

Получить запрос python в виде строки

https://docs.python.org/3/library/stdtypes.html#str .replace

0 голосов
/ 26 мая 2020

Это работает

for url in url_list:
    response = requests.get(url).content.decode('utf-8')
    path = (directory + str(url)[40:-5] +".txt").replace('/', '\\')
    with open(path, "w+") as f:
        f.write(response)
    f.close()

путь, который вы создали, был примерно таким \\Desktop\\10ks18651/000119312509042636/d10.txt Я полагаю, вы работаете над windows для этих обратных косых черт, в любом случае вам просто нужно заменить косые черты, которые были входящий в URL-адрес в обратную косую черту.

Еще одна вещь, write получает строку, из-за этого вам нужно декодировать ваш ответ, который поступает в байтах в строку.

Надеюсь, это поможет ты!

...