Шпаргалка Beautiful Soup 4

Шпаргалка Beautiful Soup 4

Ниже приведена краткая шпрагалка по работе с Beatutiful Soup 4.

В текущей реализации код опробован на Beautiful Soup версии 4.9, но т.к. основные команды базовые, то большинство из них исправно работает в более старых и новых версиях. Если мне известны, особенности работы комманды в других версиях, об этом будет указано в сноске *.

Базовый html к которому выполняются запросы взят из официальной документации Beautiful Soup 4 (opens new window)

<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
Описание Код Python Результат выполнения команды
Установка и создание базового объекта BeautifulSoup
Установка BS4
Установка парсера html('html.parser')
Не такой быстрый как lxml, менее точный чем html5lib
Установка парсера lxml ('lxml') (рекомендуемый как самый быстрый)
Очень быстрый, достаточно точный, но является зависимым от внешней C библиотеки.
Установка парсера html5lib ('html5lib')
Очень медленный но самый точный. Зависит от внешней библиотеки на Python
Создание объекта soup из строки html_string, для дальнейшей работы с html
Создание объекта soup из файла index.html для дальнейшей работы
Вывести html в читабельном виде
Навигация
Поулчить значение из тега head
<head><title>The Dormouse's story</title></head>
Получить значение теэга тега b внутри body
<b>The Dormouse's story</b>
Получить первый встреченный элемент с тэгом <a>
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
Получить список всех элементов с тэгом <a>
[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
Поулчить список всех дочерних элементов внутри тэга <head>
[<title>The Dormouse's story</title>]
Итерироваться по всем дочерним элементам внутри title_tag
<title>The Dormouse's story</title>
Перебрать все элементы title_tag рекурсивно, заходя внутрь.
<title>The Dormouse's story</title> The Dormouse's story
Итерирваться по всем предкам певого элемента <a> выводя имена тэгов предков
p Body Html [document]
Получить следующий элемент находящийся на том же уровне
,\n
Получить предыдущий элемент находящийся на том же уровне
and\n
Итерирваться по всем элементам на уровне первого тэга <a> в прямом направлении
,\n <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and\n<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a> ; and they lived at the bottom of a well.
Итерирваться по всем элементам на уровне тэга <a id="link3"> в обратном направлении
and\n <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> ,\n <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a> Once upon a time there were three little sisters; and their names were\n
Получить следующий элемент первого тэга <p> с заходом внутрь элемента
<b>The Dormouse's story</b>
Получить предыдущий элемент первого тэга <p> с заходом внутрь элемента
\n
Итерироваться по всем элементам на уровне <a id='link3'> с заходом внутрь элементов.
Tillie ;\nand they lived at the bottom of a well. \n <p class="story">...</p>... \n
Получение значений из выбранного тэга
Получить имя выборанного тэга
"head"
Получить текст содержащийся внутри тэга <head> ислкючая все теги.
"The Dormouse's story"
Внутри тега только один наследник получить его содержимое включая значение тэга
[<title>The Dormouse's story</title>]
Внутри тега только один наследник получить его содержимое без значение тэга
"The Dormouse's story"
Получить аттрибут 'id' первого тэга <a>
'link_1'
Получить все аттрибуты первого тэга <a>
{'href': 'http://example.com/elsie', 'class': ['sister'], 'id': 'link1'}
Поиск по дереву
Найти все тэги <a>
[<a class="sister" href="http://example.com/elsie" id="link1"><span>Elsie</span></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
Найти все тэги соответствующие регулярному выражению ^t.*$
[<title>The Dormouse's story</title>]
Найти все тэги <a> или <title>
[<title>The Dormouse's story</title>, <a class="sister" href="http://example.com/elsie" id="link1"><span>Elsie</span></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
Найти тэги содержащие атрибут class и дочерний тэг <b>
[<p class="title"><b>The Dormouse's story</b></p>]
Найти тэги с атрибутом id="link2"
[<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]
Найти тэги с атрибутом href соотвествующим регулярному выражению 'elsie$'
[<a class="sister" href="http://example.com/elsie" id="link1"><span>Elsie</span></a>]
Найти тэги с атрибутом href соотвествующим регулярному выражению 'elsie$' и атрибутом id="link1"
[<a class="sister" href="http://example.com/elsie" id="link1"><span>Elsie</span></a>]
Найти все тэги атрибут id которых имеет какое либо значение
[<a class="sister" href="http://example.com/elsie" id="link1"><span>Elsie</span></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
Найти все тэги в которых атрибут data-name="value"
[<div data-foo="value">foo!</div>]
Найти все тэги с классом class="title"
[<p class="title"><b>The Dormouse's story</b></p>]
Найти все тэги с классом class="title"
[<p class="title"><b>The Dormouse's story</b></p>]
Найти все тэги <p> с классом class="title active"
Найти содержимое содержащее 'Elsie'
['Elsie']
Найти теги <a> содержащие текст 'Elsie'
[<a class="sister" href="http://example.com/elsie" id="link1"><span>Elsie</span></a>]
Найти 2 первых тега <a>
[<a class="sister" href="http://example.com/elsie" id="link1"><span>Elsie</span></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]
Найти все элементы <title> на уровне html (без рекурсии)
[]