Привет, мир!

Сегодня мы рассмотрим один из моих любимых модулей 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. Если хотите, загляните также на мой веб-сайт.