Колесо Времени, которое парсит веб
Основная идея этой статьи - познакомить вас с полезным пакетом для парсинга веб-страниц на Python, называемым BeautifulSoup4, и, используя его, создать новый набор данных, связанный с вселенной Колеса Времени (КВ).
В качестве примера мы будем использовать The Wheel of Time Wiki. Он содержит огромное количество информации о КВ. Колесо Времени состоит из 14 книг, написанных Робертом Джорданом (последние три книги - Брэндоном Сандерсом) и включает почти 2373 персонажа - настоящий рай для "гиков" :) Мы создадим большой набор данных со всеми персонажами серии и их характеристиками.
Прежде чем мы начнем, я хотел бы предупредить: в этой статье мы будем использовать данные из википедии КВ только в образовательных целях без цели получения финансовой выгоды (если таковая существует). Если вы попытаетесь повторить мою последовательность действий, не парсите всю страницу, я предоставлю весь набор данных в конце статьи. Давайте уважать ребят из сообщества.
I. Введение
Если вы являетесь специалистом по обработке данных, то парсинг веб-страниц является мощным инструментом. Конечно, знание машинного обучения, умение объяснить своей маме, что такое градиентный спуск, и иметь татуировку алгоритма случайного леса на щеке - это круто, но в большинстве случаев анализ данных начинается с получения подходящего набора данных. К счастью, мы живем в век интернета, который хранит в себе огромное количество информации.
II. Алгоритм
Давайте сформулируем задачу и составим план. Мы хотим сохранить данные о каждом персонаже из вселенной "Колесо Времени" и создать один файл .csv / .tsv со всеми доступными характеристиками. Перейдите на вики-страницу "Колесо Времени" и посмотрите, что у нас есть:
[https://wot.fandom.com/wiki/Category:People](https://wot.fandom.com/wiki/Category:People)
По какой-то причине на вики-странице нет единой страницы со всеми персонажами, поэтому нам придется искать по категориям. Но это не такая большая проблема - пол является наиболее перспективным критерием. У нас есть только "Мужчины" и "Женщины". Если мы перейдем на страницу с мужскими персонажами, мы увидим алфавитный список от А до Я (рис. 1). "OTHER" пусто.
Следующая проблема заключается в том, что каждая буква не имеет отдельной страницы. В результате, щелкнув по букве "А", вы получите персонажей, начинающихся на "А", "Б" и немного на "С". Эта тенденция сохраняется и далее. Поэтому мы хотим взять только первый вход на страницу, соответствующий нужной букве. Давайте взглянем на первую страницу персонажа - "Абалдар Юлан".
Каждая страница содержит такую небольшую сводную таблицу (рис. 2) с основными характеристиками персонажа: пол, цвет волос, звание и т.д. Они могут варьироваться: некоторые персонажи могут не иметь некоторых характеристик (например, роста), но иметь другие (например, вес). Тем не менее, мы сохраним все характеристики и напишем "NA" вместо отсутствующих значений.
Наконец, мы готовы написать алгоритм:
III. Реализация кода
Есть два способа, как вы можете его прочитать. Во-первых, используя раздел Код. Если вы знаете основы программирования, парсинга веб-страниц и можете читать простой код на Python без дополнительных объяснений, перейдите к разделу Код. Во-вторых, раздел Notebook. Это jupyter notebook, в котором приведены все использованные функции и объясняется вся последовательность действий. Оба раздела доступны здесь: https://github.com/faramer86/WOTParser
Предварительные требования:
Нам понадобятся четыре пакета Python: pandas
, requests
, bs4
и string
.
Если у вас их нет, используйте pip
:
pip3 install **pandas**
pip3 install **bs4**
pip3 install **string**
Большинство из них являются общими инструментами. Нам нужен **pandas**
для создания таблицы данных с функциями, **requests**
для получения html кода с веб-сайта википедии. **string**
действительно необязательна, но я использую ее только для одной цели - не печатать весь алфавит своими руками. И ключевой инструмент - **bs4**
или BeautifulSoup4, мы будем использовать его для парсинга html.
Код:
Notebook:
IV. Сам набор данных
Итак, мы получили наши желаемые данные и можем провести некоторый исследовательский анализ. Он состоит из 2374 персонажей и 24 признаков. Примеры некоторых случайных графиков, используя R:
Набор данных бесплатно доступен, следуйте ссылке на таблицу Google:
Будьте осторожны, в нем есть несколько хитрых моментов (например, ненужные пробелы в значениях), поэтому этот набор данных нужно очистить. Но тем не менее, мы можем провести множество анализов с его помощью. Например, какие нации наиболее часто встречаются во вселенной WOT или как Аджа коррелирует со статусом (Живой/Мертвый) и т.д. (рис. 3) Так что не стесняйтесь использовать эти данные для своих собственных странных гиковских целей :)
Надеюсь, что вы нашли эту статью содержательной.