Как я могу завершить запрос в al oop через определенное время в Python? - PullRequest
1 голос
/ 09 мая 2020

Моя Python -программа должна (или уже может) отправлять запросы на список веб-сайтов, чтобы проверить, существуют ли они. Затем он должен сохранить результат (существует он или нет) в списке или впоследствии в файле. Пока работает хорошо. Но я всегда получаю сообщение об ошибке для некоторых веб-сайтов, которое выглядит примерно так:

requests.exceptions.ReadTimeout: HTTPConnectionPool(host='www.oderwald.de', port=80): Read timed out. (read timeout=60)

Я думаю, проблема в том, что веб-сайт просто не отправляет ответ и продолжает спрашивать программу. Пока моя программа выглядит так:

import requests
from requests.exceptions import ConnectionError
with open("list_website.txt") as infile:
   list = [list.strip() for list in infile]


list_ge = []
list_ne = []
x=0
n=0 
g=0
i=0

for i in range(len(list)):
    try:
        request = requests.get('http://www.' + list[i] + ".de")
    except ConnectionError:
        list_ne.append(list[i])
        g=+1
        file = open('not_working.txt','a')
        file.write(list[i]+ "\n")
    else:
        list_ge.append(list[i])
        n=+1
        file2 = open('works.txt','a')
        file2.write(liste[i] + "\n")

print(list_ge)
print(list_ne)

Кто-нибудь знает, как я могу решить эту проблему? Заранее большое спасибо.

1 Ответ

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

Изменить:

Чтобы исключение возвращалось раньше (не 60 секунд по умолчанию), измените строку

request = requests.get('http://www.' + list[i] + ".de") на

request = requests.get('http://www.' + list[i] + ".de", timeout = 2), где 2 - это максимальное количество секунд, которое вы готовы подождать.

Исходное сообщение ниже:

Веб-сайт, на который вы пытаетесь перейти (www.oderwald.de) не отвечает в назначенное время (60 секунд в вашем случае), поэтому такого поведения следовало ожидать. Поскольку это просто исключение, вы можете обработать его с помощью оператора except. См. Ниже:

try:
    request = requests.get('http://www.' + list[i] + ".de")
except requests.exceptions.ReadTimeout:
    print("Read timeout occurred")
    # The website exists but does not respond.
    # Decide to which category you assign it.

Также list() относится к встроенной функции Python, которую вы перезаписываете в этой строке: list = [list.strip() for list in infile]. Вместо этого используйте другое имя переменной.

...