beautifulsoup учебник
Начало работы с beautifulsoup
Поиск…
замечания
В этом разделе мы обсудим, что такое Beautiful Soup, для чего он используется, и краткое описание того, как его использовать.
Beautiful Soup - это библиотека Python, которая использует ваш предварительно установленный синтаксический анализатор html / xml и преобразует веб-страницу / html / xml в дерево, состоящее из тегов, элементов, атрибутов и значений. Точнее, дерево состоит из четырех типов объектов: Tag, NavigableString, BeautifulSoup и Comment. Затем это дерево можно «запросить» с помощью методов / свойств объекта BeautifulSoup, созданного из библиотеки парсеров.
Ваша потребность: Часто у вас может быть одна из следующих потребностей:
Вы можете проанализировать веб-страницу, чтобы определить, сколько найденных тегов найдено, сколько элементов каждого тега найдено и их значения. Возможно, вы захотите их изменить.
Возможно, вам захочется определить имена и значения элементов, чтобы вы могли использовать их вместе с другими библиотеками для автоматизации веб-страниц, таких как Selenium .
Возможно, вы захотите перенести / извлечь данные, показанные на веб-странице, в другие форматы, такие как CSV-файл или реляционную базу данных, такую как SQLite или mysql. В этом случае библиотека поможет вам с первого шага, понять структуру веб-страницы, хотя вы будете использовать другие библиотеки для совершения передачи.
Возможно, вам захочется узнать, сколько элементов оформлено с использованием определенного стиля CSS и какие.
Последовательность для типичного базового использования в вашем коде Python:
Импортировать библиотеку Beautiful Soup
Откройте веб-страницу или html-текст с помощью библиотеки BeautifulSoup, указав, какой парсер будет использоваться. Результатом этого шага является объект BeautifulSoup. (Примечание. Указанное имя парсера должно быть установлено уже как часть ваших Python pacakges. Например,
html.parser
- встроенный пакет «с батареями», поставляемый с Python. Вы можете установить другие синтаксические анализаторы, такие какlxml
илиhtml5lib
.)«Запрос» или
'object.method'
поиск объекта BeautifulSoup с использованием синтаксиса'object.method'
и получить результат в коллекции, например, в словаре Python. Для некоторых методов выход будет простым значением.Используйте результат на предыдущем шаге, чтобы делать все, что вы хотите с ним, в остальной части вашего кода Python. Вы также можете изменить значения элементов или значения атрибутов в дереве. Модификации не влияют на исходный код html, но вы можете вызывать методы форматирования вывода (например,
prettify
) для создания нового вывода из объекта BeautifulSoup.
Обычно используемые методы. Как правило, методы поиска .find
и .find_all
используются для поиска дерева, предоставляя входные аргументы.
Входными аргументами являются: имя тега, которое запрашивается, имена атрибутов и другие связанные аргументы. Эти аргументы могут быть представлены как: строка, регулярное выражение, список или даже функция.
Общее использование объекта BeautifulSoup включает в себя:
- Поиск по классу CSS
- Поиск по адресу гиперссылки
- Поиск по элементу Id, тег
- Поиск по имени атрибута. Значение атрибута.
Если вам нужно отфильтровать дерево с помощью сочетания вышеуказанных критериев, вы также можете написать функцию, которая оценивает значение true или false, и поиск по этой функции.
Версии
Версия | замечания | Имя пакета | Дата выхода |
---|---|---|---|
3.x | Версия 3.2.1; Только Python 2 | BeautifulSoup | 2012-02-16 |
4.x | Версия 4.5.0; Python 2 и 3 | beautifulsoup4 | 2016-07-20 |
Установка или настройка
pip может использоваться для установки BeautifulSoup. Чтобы установить версию 4 BeautifulSoup, выполните команду:
pip install beautifulsoup4
Имейте в виду, что имя пакета beautifulsoup4
вместо beautifulsoup
, последнее название означает старую версию, см. Old beautifulsoup
Пример стирания BeautifulSoup «Hello World»
from bs4 import BeautifulSoup
import requests
main_url = "https://fr.wikipedia.org/wiki/Hello_world"
req = requests.get(main_url)
soup = BeautifulSoup(req.text, "html.parser")
# Finding the main title tag.
title = soup.find("h1", class_ = "firstHeading")
print title.get_text()
# Finding the mid-titles tags and storing them in a list.
mid_titles = [tag.get_text() for tag in soup.find_all("span", class_ = "mw-headline")]
# Now using css selectors to retrieve the article shortcut links
links_tags = soup.select("li.toclevel-1")
for tag in links_tags:
print tag.a.get("href")
# Retrieving the side page links by "blocks" and storing them in a dictionary
side_page_blocks = soup.find("div",
id = "mw-panel").find_all("div",
class_ = "portal")
blocks_links = {}
for num, block in enumerate(side_page_blocks):
blocks_links[num] = [link.get("href") for link in block.find_all("a", href = True)]
print blocks_links[0]
Выход:
"Hello, World!" program
#Purpose
#History
#Variations
#See_also
#References
#External_links
[u'/wiki/Main_Page', u'/wiki/Portal:Contents', u'/wiki/Portal:Featured_content', u'/wiki/Portal:Current_events', u'/wiki/Special:Random', u'https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en', u'//shop.wikimedia.org']
Ввод вашего предпочтительного синтаксического анализатора при запуске Beautiful Soup позволяет избежать обычного Warning
о том, что no parser was explicitely specified
.
Для поиска элемента в дереве веб-страниц можно использовать различные методы.
Хотя существует и несколько других методов, CSS classes
CSS selectors
- это два удобных способа поиска элементов в дереве.
Следует отметить, что мы можем искать теги, устанавливая их значение атрибута True при их поиске.
get_text()
позволяет нам получать текст, содержащийся в теге. Он возвращает его как одну строку Unicode. tag.get("attribute")
позволяет получить значение атрибута тега.