CoderCastrov logo
CoderCastrov
Веб-сайт

Колесо Времени, которое парсит веб

Колесо Времени, которое парсит веб
просмотров
4 мин чтение
#Веб-сайт

Основная идея этой статьи - познакомить вас с полезным пакетом для парсинга веб-страниц на 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:

Random Plots

Набор данных бесплатно доступен, следуйте ссылке на таблицу Google:

WOT_dataset

Будьте осторожны, в нем есть несколько хитрых моментов (например, ненужные пробелы в значениях), поэтому этот набор данных нужно очистить. Но тем не менее, мы можем провести множество анализов с его помощью. Например, какие нации наиболее часто встречаются во вселенной WOT или как Аджа коррелирует со статусом (Живой/Мертвый) и т.д. (рис. 3) Так что не стесняйтесь использовать эти данные для своих собственных странных гиковских целей :)

Надеюсь, что вы нашли эту статью содержательной.