Привет, мир!
Сегодня мы рассмотрим один из моих любимых модулей Python: requests-html. Эта библиотека сделана тем же парнем, который сделал библиотеку популярных запросов.
Идея этой библиотеки состоит в том, чтобы сделать просмотр веб-страниц максимально простым и интуитивно понятным.
Первое, что нам нужно сделать, как обычно, это установить библиотеку:
pip install requests-html
В этом примере мы также будем использовать pandas и html5lib для работы с данными, которые мы собираемся извлечь, поэтому вам также необходимо установить эти модули:
pip install pandas pip install html5lib
Чтобы использовать этот модуль в своем коде, вам необходимо импортировать его, как обычно, и создать объект HTMLSession. Этот объект будет содержать всю информацию, используемую для связи между request-html и веб-страницей (заголовки, файлы cookie…):
Теперь нам нужно что-то поцарапать. Для этого примера мы собираемся получить таблицу медалей зимних олимпийских игр за все время из Википедии:
В этом фрагменте мы объявляем URL-адрес, а затем создаем запрос на получение и сохраняем ответ в переменной с именем res. Нам не нужно передавать какой-либо конкретный заголовок в Википедию, но если бы нам это было нужно, мы могли бы отправить заголовок как словарь Python:
Теперь нам нужно найти все таблицы на странице и определить, какие из них нужно очистить. Чтобы найти html-элементы внутри ответа, request-html использует селекторы CSS. Если вы никогда ими не пользовались, то можете посмотреть их здесь. В нашем случае мы будем искать на странице класс с именем wikitable:
После того, как мы просмотрели все таблицы, нам нужно перебрать их, чтобы найти нужную. Для этого мы можем использовать простой цикл for, в котором мы печатаем заголовок таблицы, используя другую команду find и ищем tr -> строку таблицы и выбираем первую. Нам также нужно удалить символ новой строки, чтобы получить более чистый вывод:
Таблица 0: Спортивные годы Медальные соревнования, разыгранные в 2022 г.
Таблица 1: № Страна Золото Серебро Бронза Всего игр
Таблица 2: Год № Даты проведения игр / Открытие по видам спорта (дисциплинам) Участники Соревнования Страны Лучшие страны
Стол, который нам нужно очистить, — второй. Чтобы легко преобразовать его в фрейм данных pandas, мы можем использовать функцию pandas: read_html:
Вывод должен выглядеть примерно так:
Это всего лишь небольшой пример того, что может сделать request-html. Я использую его почти в каждом проекте веб-дизайна, поэтому надеюсь, что он будет вам полезен.
Как обычно, вы найдете код этого примера на Github. Если хотите, загляните также на мой веб-сайт.