@rkhokhorin

Почему один из классов на сайте периодически не находится с помощью bs4 ( Хотя на сайте этот класс есть)?

Возникла такая проблема. У меня есть имя, фамилия, дата (с какого по какой год этот человек учился) и город, где он учился. Мне нужно найти его научные работы (или убедиться что их нет). Вот пример страницы с которой я парсил
https://cyberleninka.ru/search?q=%D0%B2%D0%B0%D0%B...
. Небольшое объяснение моей задумки: Если имя, фамилия и дата совпадают с указанными мы должны взять ссылку для проверки города. Вот функция, которая это делает
def __parse_links(self, name, page_count, year, geo):
    try:
        list_links = []
        for page in range(1, page_count + 1):
            url = 'https://cyberleninka.ru/search?q={}&page={}'.format(name + ' ' + geo, page)
            soup = self.__get_url_raw(url)
            time.sleep(4)
            all_variation_name = self.__creat_all_variation_name(name.split())
            all_teg_li_in_list_page = soup.find('ul', {'id': 'search-results'})
            all_teg_li_in_list_page = all_teg_li_in_list_page.find_all('li')
            list_links = list()
            for li in all_teg_li_in_list_page:
                name_text = li.find('span').text.lower()
                date_text = li.find_all('span')[-1].text.lower()
                if (self.__check_exist_name_in_text(name_text, all_variation_name)) and (self.__check_exist_date_in_text(date_text, year)):
                    list_links.append(li.find('a').get('href'))
        return list_links
    except Exception as e:
        if self.log is not None:
            log_error(self.log, e, '__parse_links')

Но тут у меня возникла проблема. Строка all_teg_li_in_list_page = all_teg_li_in_list_page.find_all('li') периодически получает None т.е. он не находит ('ul', {'id': 'search-results'}), хотя этот класс есть на странице (ссылка, приведённая мной для примера это одна из тех страниц где он не нашёл этот класс)
5f27a28ad139d745046865.jpeg
Необычно в этом и то, что я не могу найти этот класс с помощью поиска (ctrl+f, утверждает, что нашёл элемент, но не показывает его). Так же эта проблема возникает не всегда. Он может 20 раз подряд спокойно находить этот класс, но потом теряет и выбивает ошибку ERROR: 'NoneType' object has no attribute 'find_all'. Изначально я думал, что страница не прогружается (из-за чего там и стоит time.sleep), но это мне не помогло. Так же я думал, что проблема в скриптах, но я не вижу чтобы на странице прогружались скрипты. По какой причине bs4 может периодически не находить класс, который там точно есть?
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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