@faith0

Как исправить ошибку в парсинге?

Ссылка для парсинга:
url = 'https://ru.wikipedia.org/wiki/Категория:Животные_по_алфавиту'

Задача спарсить названия животных и вывести общее количество животных на каждую букву
У меня циклическая ошибка в коде, не знаю как исправить, циклится на букве Z
links = soup.find('div', id='mw-pages').find_all('a')
for a in links:
        if a.text == 'Следующая страница':
            url = 'https://ru.wikipedia.org/' + a.get('href')
            req = requests.get(url).text

Полный код
headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.143 YaBrowser/22.5.0.1884 Yowser/2.5 Safari/537.36"
}
url = 'https://ru.wikipedia.org/wiki/Категория:Животные_по_алфавиту'

req = requests.get(url, headers=headers).text
while True:
    soup = BeautifulSoup(req, 'lxml')

    block = soup.find('div', class_='mw-category mw-category-columns')
    category_letter = block.find('div', class_='mw-category-group')
    category = category_letter.find_next('h3').text
    animal_names = block.find_all('li')

    animals_names = []
    for animal in animal_names:
        animal_name = animal.text
        animals_names.append(animal_name)

    names = 0
    for name in animals_names:
        if name.startswith(category):
            names += 1
    names_dict = {}
    names_dict.update({category: names})

    order = {}
    for key in names_dict:
        try:
            order[key] += int(names_dict[key])
        except:
            order[key] = int(names_dict[key])

    for key, value in order.items():
        print(key, value)

    links = soup.find('div', id='mw-pages').find_all('a')
    for a in links:
        if a.text == 'Следующая страница':
            url = 'https://ru.wikipedia.org/' + a.get('href')
            req = requests.get(url).text
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 1
@PavelMos
Если следующий href с переходом на сл. страницу не находится, в цикле продолжает использоваться предыдущий href. И вообще while True само по себе не остановится. Можно флаг поставить и проверять его.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы