Как я могу узнать текущий статус запроса? - PullRequest
0 голосов
/ 07 августа 2020

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

import requests

with open('file.txt', 'r') as f:
    urls = f.readlines()

datalist=[]
for url in urls:
    data = requests.get(url)
    datalist.append(data.text)

with open('file_complete.txt', 'w') as f:
    for item in datalist:
        f.write("%s\n" % item)

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Вы можете добавить оператор print () перед request.gets (url) и после datalist.append (data.text). По крайней мере, вы можете отслеживать прогресс по URL.

for url in urls:
    print("Getting " + url)
    data = requests.get(url)
    datalist.append(data.text)
    print(url + " successfully downloaded")

Однако ваш код записывается в файл только один раз все URL-адреса были загружены. Если программа завершится ошибкой в ​​любой момент, file_complete.txt не будет создан. Поэтому я предлагаю записать в файл после успешной загрузки любого URL-адреса.

import requests

with open('file.txt', 'r') as f:
    urls = f.readlines()

# datalist=[]  // No longer needed
for url in urls:
    data = requests.get(url)

    with open('file_complete.txt', 'a+') as f:   #change to mode "a+" to append
        f.write(data.text + "\n")

Еще одно улучшение, которое можно сделать - ваш код предполагает, что ВСЕ URL-адреса действительны. Мы можем использовать блок try-except для обнаружения ошибок.

import requests

with open('file.txt', 'r') as f:
    urls = f.readlines()

# datalist=[]  // No longer needed
for url in urls:
    try:
        data = requests.get(url)
    except:
        printf(url + " failed")
        continue   #moves on to the next url as nothing to write to file

    with open('file_complete.txt', 'a+') as f:   #change to mode "a+" to append
        f.write(data.text + "\n")

0 голосов
/ 07 августа 2020

requests.get () - это блокирующий вызов. Если вы хотите иметь немного больше контроля, вы можете отправлять свои запросы в отдельных потоках. Вы также можете добавить таймауты , если это вызывает беспокойство. Но нет, нет возможности проверить ход выполнения текущего запроса получения.

...