BeautifulSoup

Руководство Python BeautifulSoup для начинающих

Руководство Python BeautifulSoup для начинающих
Веб-скрапинг имеет большое значение в современном мире. Всем нужны данные из разных источников, включая веб-страницы. В этой статье мы рассмотрим, как разобрать html с помощью библиотеки beautifulsoup. Извлечение необходимых данных из набора алфавитов и символов, благодаря этой замечательной библиотеке, стало намного проще. BeautifulSoup, написанный на Python, можно легко установить на ваш компьютер с помощью инструмента установки Python pip. Следующая команда поможет установить библиотеку:

pip установить BeautifulSoup4

Чтобы проверить успешность установки, активируйте интерактивную оболочку Python и импортируйте BeautifulSoup. Если ошибок нет, значит, все прошло нормально.  Если вы не знаете, как это сделать, введите следующие команды в свой терминал.

$ питон
Python 3.5.2 (по умолчанию, 14 сентября 2017 г., 22:51:06)
[GCC 5.4.0 20160609] в Linux
Введите «помощь», «авторские права», «кредиты» или «лицензия» для получения дополнительной информации.
>>> импорт bs4

Для работы с библиотекой BeautifulSoup необходимо передать html. При работе с реальными веб-сайтами вы можете получить html веб-страницы, используя библиотеку запросов. Установка и использование библиотеки запросов выходит за рамки этой статьи, однако вы можете найти свой путь в документации, которую довольно легко использовать. В этой статье мы просто будем использовать html в строке Python, которую мы будем называть html.

html = "" "

Профиль сотрудника



Имя:Д-р Питер Паркер

Работа:Инженер по машинному обучению

Телефон:+12345678910


Веб-сайт:
pparkerworks.ком



"" "

Чтобы использовать beautifulsoup, мы импортируем его в код, используя следующий код:

из bs4 импорт BeautifulSoup

Это введет BeautifulSoup в наше пространство имен, и мы сможем использовать его при синтаксическом анализе нашей строки.

soup = BeautifulSoup (html, "lxml")

Сейчас, суп является объектом BeautifulSoup типа bs4.BeautifulSoup, и мы сможем выполнить все операции BeautifulSoup на супПеременная.

Давайте посмотрим, что мы можем делать с BeautifulSoup прямо сейчас.

СДЕЛАТЬ УЖЕСТВЕННОЕ, КРАСИВОЕ

Когда BeautifulSoup анализирует html, он обычно не в лучшем из форматов. Интервал довольно ужасный. Теги трудно найти. Вот изображение, чтобы показать, как они будут выглядеть, когда вы напечатаете суп:

Однако есть решение этой проблемы. Решение дает html идеальный интервал, чтобы все выглядело хорошо. Это решение заслуженно называют «украсить«.

По общему признанию, вы можете не использовать эту функцию большую часть времени; однако бывают случаи, когда у вас может не быть доступа к инструменту проверки элементов в веб-браузере. В те времена ограниченных ресурсов вы найдете метод prettify очень полезным.

Вот как вы его используете:

суп.prettify ()

Разметка будет выглядеть правильно, как на изображении ниже:

Когда вы применяете метод prettify к супу, результат больше не тип bs4.BeautifulSoup. В результате теперь введите unicode. Это означает, что вы не можете применять к нему другие методы BeautifulSoup, однако сам суп не затронут, поэтому мы в безопасности.

НАЙТИ НАШИ ЛЮБИМЫЕ ТЕГИ

HTML состоит из тегов. Он хранит в них все свои данные, и среди всего этого беспорядка лежат данные, которые нам нужны. По сути, это означает, что когда мы находим правильные теги, мы можем получить то, что нам нужно.

Итак, как нам найти правильные теги? Мы используем методы find и find_all от BeautifulSoup.

Вот как они работают:

В найти метод ищет первый тег с нужным именем и возвращает объект типа bs4.элемент.Тег.

В найти все с другой стороны, ищет все теги с нужным именем тега и возвращает их в виде списка типа bs4.элемент.ResultSet. Все элементы в списке относятся к типу bs4.элемент.Отметьте тег, чтобы мы могли выполнить индексацию по списку и продолжить исследование beautifulsoup.

Посмотрим код. Найдем все теги div:

суп.найти («div»)

Получим следующий результат:

Имя:Д-р Питер Паркер

Проверив переменную html, вы заметите, что это первый тег div.

суп.find_all («div»)

Получим следующий результат:

[
Имя:Д-р Питер Паркер
,
Работа:Инженер по машинному обучению
,
Телефон:+12345678910
,
,
Веб-сайт:
pparkerworks.ком
]

Он возвращает список.  Если, например, вам нужен третий тег div, вы запустите следующий код:

суп.find_all («div») [2]

Он вернет следующее:

Телефон:+12345678910

ПОИСК АТРИБУТОВ НАШИХ ЛЮБИМЫХ ТЕГОВ

Теперь, когда мы увидели, как получить наши любимые теги, как насчет получения их атрибутов??

В этот момент вы можете подумать: «Зачем нам нужны атрибуты для?«. Что ж, в большинстве случаев большая часть необходимых данных - это адреса электронной почты и веб-сайты. На такие данные обычно есть гиперссылки на веб-страницах, причем ссылки указаны в атрибуте «href».

Когда мы извлекли нужный тег с помощью методов find или find_all, мы можем получить атрибуты, применив attrs. Это вернет словарь атрибута и его значение.

Например, чтобы получить атрибут электронной почты, мы получаем теги, которые окружают необходимую информацию, и делают следующее.

суп.find_all («а») [0].attrs

Что вернет следующий результат:

'href': 'mailto: [адрес электронной почты защищен]'

То же самое и с атрибутом сайта.

суп.find_all («а») [1].attrs

Что вернет следующий результат:

'href': '
http: // pparkerworks.ком'

Возвращаемые значения являются словарями, и для получения ключей и значений можно применить обычный синтаксис словаря.

ПОСМОТРЕТЬ РОДИТЕЛЯ И ДЕТЕЙ

Везде есть теги. Иногда нам нужно знать, что такое дочерние теги и что это за родительский тег.

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

Взглянув на наш html, тег body является родительским тегом всех тегов div. Кроме того, полужирный тег и тег привязки являются дочерними элементами тегов div, где это применимо, поскольку не все теги div имеют теги привязки.

Таким образом, мы можем получить доступ к родительскому тегу, вызвав findParent метод.

суп.найти ("div").findParent ()

Это вернет весь тег body:


Имя:Д-р Питер Паркер

Работа:Инженер по машинному обучению

Телефон:+12345678910


Веб-сайт:
pparkerworks.ком

Чтобы получить дочерний тег четвертого тега div, мы вызываем findChildren метод:

суп.find_all ("div") [4].findChildren ()

Он возвращает следующее:

[Веб-сайт:, pparkerworks.ком]

ЧТО В ЭТОМ ДЛЯ НАС?

При просмотре веб-страниц мы не видим теги везде на экране. Все, что мы видим, - это содержание разных тегов. Что, если нам нужно содержимое тега без всех угловых скобок, делающих жизнь неудобной?? Это не сложно, все, что нам нужно сделать, это позвонить get_text в выбранном теге, и мы получаем текст в теге, и если в теге есть другие теги, он также получает их текстовые значения.

Вот пример:

суп.найти ("тело").get_text ()

Это возвращает все текстовые значения в теге body:

Имя: Д-р Питер Паркер
Работа: инженер по машинному обучению
Телефон: +12345678910
Электронная почта: [электронная почта защищена]
Сайт: pparkerworks.ком

ЗАКЛЮЧЕНИЕ

Вот что у нас есть для этой статьи. Однако есть и другие интересные вещи, которые можно сделать с beautifulsoup. Вы можете либо проверить документацию, либо использовать реж (BeautfulSoup) в интерактивной оболочке, чтобы просмотреть список операций, которые можно выполнять с объектом BeautifulSoup. Это все от меня сегодня, пока я снова не напишу.

Учебник Battle for Wesnoth
Битва за Веснот - одна из самых популярных стратегических игр с открытым исходным кодом, в которую вы можете играть сейчас. Эта игра не только очень д...
0 А.D. Руководство
Из множества существующих стратегических игр 0 A.D. удается выделиться как всеобъемлющее название и очень глубокая тактическая игра, несмотря на то, ч...
Учебное пособие по Unity3D
Введение в Unity 3D Unity 3D - мощный движок для разработки игр. Это кроссплатформенный, то есть он позволяет создавать игры для мобильных устройств, ...