
Шпаргалка 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 (без рекурсии) |
| [] |