Задать вопрос
wolverine777
@wolverine777

Почему не останавливается цикл while во время скрэйпинга?

Привет, мне нужно вытащить всех авторов со всех страниц с учебного сайта http://quotes.toscrape.com/

Я хочу это сделать при помощи while- с учетом того что я не знаю конечное число страниц.

Вот этот код выводит мне желаемое но почему-то не выходит из цикла, притом что страниц то всего 10 - продолжает скрэйпить несуществующее... В чем дело? Спасибо.

i = 1
while(True):
    try:
        url = "http://quotes.toscrape.com/page/{}/".format(i)
            
        result = requests.get(base_url.format(i))
        soup = bs4.BeautifulSoup(result.text,"lxml")

        #print page url
        for item in soup.select('.author'):
             print(item.text)
                    


        #increase page number
        i += 1
    except:
        break
  • Вопрос задан
  • 67 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Если элемент не был найден - исключение не выкидывается.

Так чтоsoup.select('.author') возвращает просто None, никакой ошибки в этом нет. Проверяйте содержимое soup.select('.author') на None.

authors = soup.select('.author')

if authors:
    for author in authors:
        print(author.text)
else:
    break
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Kardfox
Программист на Python с четырехлетним опытом.
Сама-то страница существует, а если soup не находит атрибута .author или что это - он не выдает ошибки.
Тебе нужно всегда проверять soup на отсутствие атрибутов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽