Библиотека Python для анализа HTML

По мере приближения октября моя девушка настаивает на том, чтобы напомнить мне, сколько дней осталось до Хэллоуина. Октябрь - это то, что она называет «жутким месяцем», когда все, что мы смотрим, - это фильмы ужасов и читаем страшилки. Это ее любимый месяц в году.

Узнав больше о Data Science, я снова хотел попробовать машинное обучение. Но сначала мне нужно было подумать о проекте. С приближением октября я решил попробовать использовать машинное обучение для создания коротких ужасов. Я мог прочитать список рассказов в качестве образцов, а затем позволить машине сгенерировать следующий рассказ. Это было бы больше похоже на глубокое обучение, поскольку оно используется для генерации, а не для прогнозирования или классификации. Но прежде чем я смогу прочитать список, мне нужно будет его создать. Вот где я решил попробовать парсинг веб-страниц.

Прежде чем мы начнем, важно отметить, что создать что-то динамичное будет сложно, если не невозможно. HTML-код веб-сайтов часто отличается, и никакие два веб-сайта не используют одинаковые соглашения об именах во всех своих классах. Итак, для этой сборки она будет работать только для выбранного мной веб-сайта. Еще одно важное замечание: парсинг веб-страниц - это серая область этики. Хотя это не является технически незаконным, извлечение информации из веб-страниц может вызывать проблемы с конфиденциальностью, а сбор даже только HTML-кода на некоторых веб-сайтах запрещен. Вам необходимо ознакомиться с Политикой конфиденциальности или Условиями использования веб-сайтов, прежде чем выполнять парсинг. Проблема, с которой я столкнулся, заключается в том, что во многих блогах и на веб-сайтах с короткими рассказами ужасов это написано в своих Условиях и положениях, которые вы не можете очистить в Интернете. На выбранном мной веб-сайте нет такого правила, но это не всегда означает, что с ним проще всего работать. Но мы вернемся к этому чуть позже. Во-первых, давайте поговорим еще немного о том, какую библиотеку Python мы собираемся использовать сегодня для нашего веб-скрапинга.

Что такое красивый суп?

Я выбрал библиотеку Python Beautiful Soup. В частности, я выбрал версию 4, так как поддержка версии 3 прекращена. Beautiful Soup - это библиотека, созданная для извлечения данных из файлов HTML или XML. Программисты используют его для экономии времени, работая с анализатором HTML для поиска, навигации или изменения дерева синтаксического анализа.

Его можно использовать для поиска элементов, получения текста или просто для облегчения чтения данных. Beautiful Soup не только очень мощный, но и простой в использовании. Итак, без промедления приступим к установке Beautiful Soup.

Установка Beautiful Soup

Итак, для начала никогда не помешает обновить свою версию, на случай, если у вас нет библиотеки:

sudo apt-get update

Как всегда, я использую командную строку Ubuntu. Как только это будет сделано, вы можете сразу приступить к установке Beautiful Soup. Поскольку мы используем Python, вы можете установить его с помощью pip. Не забудьте использовать Python3.

sudo pip3 install beautifulsoup4

Для парсера HTML я выбрал «html.parser», который должен быть установлен по умолчанию, если вы хотите использовать другой парсер, такой как lxml или html5lib, вам также придется установить их:

sudo pip3 install lxml

or

sudo pip3 install html5lib

Теперь, когда у вас есть Beautiful Soup и выбранный вами анализатор HTML, мы готовы приступить к написанию кода.

Создание приложения для очистки веб-страниц

Как я уже упоминал ранее, выбрать веб-сайт было немного сложно. Многие из найденных мной опций либо не позволяли парсить веб-страницы, либо HTML был заполнен JSON. Выбранный мной веб-сайт поддерживает парсинг веб-страниц и прост в использовании HTML. Единственная проблема в том, что нет классов или четких сегментов, в которых существует история. Также есть несколько примечаний автора, но их можно отфильтровать по типу тега. Но поскольку все рассказы содержатся в абзацах, я должен сначала выделить необходимую область. Но прежде чем мы погрузимся слишком далеко, нам нужно сначала заявить о нашем импорте.

import requests
from bs4 import BeautifulSoup

Теперь мы готовы получить сайт:

website = requests.get(‘WEBSITE_YOU_WISH_TO_SCRAPE’)

Затем нам нужно объявить просто список, который мы будем использовать позже для хранения историй:

storyList = []

Составив список, мы готовы приступить к работе. Как я уже говорил всего минуту назад, не было четкого начала или конца историй, которые я хотел бы из списка. Итак, прежде чем мы начнем что-нибудь с Beautiful Soup, нам нужно выделить нужный нам текст. Для этого я выбрал фильтрацию на основе последней истории. Последнее - скорее примечание автора, поэтому мы не хотим его включать. Он имеет идентификатор q10. Мы можем использовать эту историю в конце, чтобы отсечь то, чего мы не хотим, и в начале, как это упоминается в указателе.

Для этого нам нужен контент на веб-сайте, создайте список вокруг идентификатора q10 и установите нашу переменную только в тот раздел, который нам нужен, который будет средним разделом. Затем нам нужно создать список историй, из которых Beautiful Soup может извлечь HTML-код. Мы снова разделим, используя идентификаторы «q», но на этот раз нам нужно будет избавиться только от первого, которое происходит до появления историй, но после индексов. Надеюсь, ты все еще со мной. Было бы полезно просмотреть HTML-код веб-сайта перед чтением всего этого раздела кода. Таким образом вы сможете представить себе, почему нам нужно разделять и извлекать области кода.

stories = str(website.content)
stories = stories.split(‘q10’)
stories = str(stories[1])
stories = stories.split(‘id=”q’)
stories.pop(0)

Теперь, когда у нас наконец есть нужный раздел, мы можем задействовать Beautiful Soup. Мы сделаем это в цикле for, собрав каждую историю из нашего списка. Затем мы воспользуемся Beautiful Soup для очистки с помощью парсера HTML. Далее нам понадобится пустая строка. К сожалению, для поиска каждого абзаца в истории требуется дополнительный цикл for. Это потому, что они разделены в HTML.

В этом цикле мы добавим каждую из этих строк абзаца к пустой строке, если эта строка не является одной из примечаний автора под «em», и когда все строки будут добавлены в строку, мы можем добавить ее. в пустой список, объявленный ранее:

for story in stories:
     scrape = BeautifulSoup(story, ‘html.parser’)
     storyLine = “”
     for line in scrape.find_all(‘p’):
          if not line.find(‘em’):
               storyline += line.get_text()
     
     storyList.append(storyLine)

Когда вы запускаете код, он ничего не выводит. Вам нужно будет создать цикл for для печати, если вы хотите увидеть результаты. BeautifulSoup также имеет больше возможностей, чем то, что мы использовали для этого проекта. Но пока это был быстрый и простой способ наскрести истории, которые понадобятся мне позже.

Заключение

В этой статье мы немного поговорили о Beautiful Soup, как установить Beautiful Soup и другой парсер, если он вам нужен, а также о коде, необходимом для очистки веб-сайта, который я выбрал для сбора рассказов. Beautiful Soup было невероятно простым в освоении, и найти решения было намного проще, чем найти веб-сайт, позволяющий выполнять парсинг. По сравнению с другими парсерами, которые я пробовал, Beautiful Soup была самой удобной библиотекой для начинающих. Это также более интуитивно понятно и легче понять при использовании. Я очень рекомендую попробовать Beautiful Soup. Не стесняйтесь оставлять комментарии о своем опыте работы с Beautiful Soup. До следующего раза, ура!

Читайте все мои статьи бесплатно с помощью моего еженедельного информационного бюллетеня, спасибо!

Хотите читать все статьи на Medium? Станьте участником Medium сегодня!

Ознакомьтесь с некоторыми из моих недавних статей:











Использованная литература:





Больше контента на plainenglish.io