в цикле перебора url нужно возвратиться к url, в котором возникла ошибка

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
Win7x64, python 3.8
в парсере перебираются urls в цикле for, бывает так, что сайт разрывает коннект, нужно при возникновении такого явления вернуться на тот url, который парсился и начать парсинг его заново, конечно, после sleep.
понимаю приблизительно, как это должно быть, но вот реализовать как-то не получается...
Python:
for i, url in enumerate(urls):

    start = urls[i]
    while True:
        try:
            sleep(1)
            for img_url in get_img_urls(session, url):
                save_img(session, img_url, folder) # здесь сохранение img в файл
            break
        except Exception as err:
            print('Ошибка', err)
            print('Ждем 60 сек')
            sleep(60)
            url = start
            continue

примерно так вижу реализацию, но проблема в том, что я не могу специально вызвать ConnectionError у сайта, чтобы проверить свой цикл. менял урл на неверный, но сайт отдает 404 пагу и except не срабатывает.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
я не могу специально вызвать ConnectionError у сайта
Можно попробовать делать raise ConnectionError.
Вот пример:
Python:
import random


def parse_urls(attempts=3):
    a = attempts
    print('-' * 30)
    print('Парсинг')
    print('Осталось попыток:', a)
    print('-' * 30)
    x = random.randint(0, 5)
    for i in range(5):
        try:
            if i == x:
                raise ConnectionError
            print(i)
        except ConnectionError as e:
            print('Ошибка на ссылке №:', i)
            if a > 1:
                a -= 1
                parse_urls(a)
            break
    else:
        print('-' * 30)
        print('Парсинг завершен без ошибок')
        print('-' * 30)

parse_urls()
 
  • Мне нравится
Реакции: robisho

Форум IT Специалистов