Как спарсить css beautiful soup

Спарсить после конкретного класса в Beautiful Soup (Python)

Подскажите, у меня парсится сайт, который содержит такой html:

Надо спарсить все , но именно после

Как это реализовать?

Вот такой код с этим справится:

P.S. Не делайте имена переменных совпадающими со стандартными именами Python, как, например, list . Могут быть проблемы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками python python-3.x парсер beautiful-soup или задайте свой вопрос.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.12.3.40888

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Скрапинг веб-страниц в Python с Beautiful Soup: основы

В предыдущем уроке я показал вам, как использовать модуль Requests для доступа к веб-страницам с использованием Python. В этом учебном пособии рассмотрено множество тем, таких как получение запросов GET / POST и программная загрузка таких файлов, как изображения или PDF. Единственное, чего не было в этом учебнике — руководства по скрапингу веб-страниц, к которым вы обращались с помощью requests, для извлечения необходимой информации.

В этом уроке вы узнаете о Beautiful Soup, который представляет собой библиотеку Python для извлечения данных из файлов HTML. В этом уроке основное внимание будет уделено изучению основ библиотеки, а более подробные темы будут рассмотрены в следующем учебном пособии. Обратите внимание, что в этом руководстве для всех примеров используется Beautiful Soup 4.

Установка

Вы можете установить Beautiful Soup 4 с помощью pip . Название пакета beautifulsoup4 . Он должен работать как на Python 2, так и на Python 3.

Если в вашей системе нет pip, вы можете напрямую загрузить исходный tarball Beautiful Soup 4 и установить его с помощью setup.py .

BeautifulSoup изначально упакован как код Python 2. Когда вы устанавливаете его для использования с Python 3, он автоматически обновляется до кода Python 3. Код не будет конвертирован, если вы не установите пакет. Вот несколько распространенных ошибок, которые вы могли заметить:

  • «Нет модуля с именем HTMLParser» ImportError возникает, когда вы запускаете версию кода Python 2 под Python 3.
  • «Нет модуля с именем html.parser» ImportError возникает, когда вы запускаете версию кода Python 3 под Python 2.

Обе приведенные выше ошибки могут быть исправлены путем удаления и переустановки Beautiful Soup.

Установка парсера

Прежде чем обсуждать различия между различными парсерами, которые вы можете использовать с Beautiful Soup, давайте напишем код для создания soup.

Объект BeautifulSoup может принимать два аргумента. Первым аргументом является фактическая разметка, а второй аргумент — синтаксический анализатор, который вы хотите использовать. Различные синтаксические анализаторы: html.parser , lxml и html5lib. Парсер lxml имеет две версии: парсер HTML и синтаксический анализатор XML.

html.parser — встроенный парсер, и он не работает так хорошо в более старых версиях Python. Вы можете установить другие синтаксические анализаторы, используя следующие команды:

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

Различия, описанные в приведенном выше примере, имеют значение только при анализе невалидного HTML. Тем не менее, большая часть HTML в Интернете невалидна, и знание этих различий поможет вам отладить некоторые ошибки синтаксического анализа и решить, какой парсер вы хотите использовать в проекте. Как правило, анализатор lxml является очень хорошим выбором.

Объекты в Beautiful Soup

Beautiful Soup анализирует данный HTML-документ в дерево объектов Python. Есть четыре основных объекта Python, о которых вам нужно знать: Tag , NavigableString , BeautifulSoup и Comment .

Объект Tag ссылается на фактический тег XML или HTML в документе. Вы можете получить доступ к имени тега, используя tag.name . Вы также можете установить имя тега на что-то еще. Изменение имени будет видно в разметке, созданной Beautiful Soup.

Вы можете получить доступ к различным атрибутам, таким как класс и идентификатор тега, используя tag[‘class’] и tag[‘id’] соответственно. Вы также можете получить доступ ко всему словарю атрибутов с помощью tag.attrs . Вы также можете добавлять, удалять или изменять атрибуты тега. Атрибуты элемента, такие как class , который может принимать несколько значений, сохраняются в виде списка.

Текст в теге хранится как NavigableString в Beautiful Soup. Он имеет несколько полезных методов, таких как replace_with("string") , чтобы заменить текст в теге. Вы также можете преобразовать строку NavigableString в строку unicode, используя unicode() .

Beautiful Soup также позволяет получить доступ к комментариям на веб-странице. Эти комментарии хранятся как объект Comment , который также является в основном NavigableString .

Вы уже узнали о объекте BeautifulSoup в предыдущем разделе. Он используется для представления документа в целом. Поскольку он не является фактическим объектом, он не имеет никаких имен или атрибутов.

Получение Title, Headings и Links

Вы можете легко извлечь заголовок страницы и другие такие данные с помощью Beautiful Soup. Давайте соберем данные со страницы Википедии о Python. Во-первых, вам нужно будет получить разметку страницы, используя следующий код на основе учебника модуля Requests для доступа к веб-страницам.

Теперь, когда вы создали soup, вы можете получить заголовок веб-страницы, используя следующий код:

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

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

Навигация по DOM

Вы можете перемещаться по дереву DOM с помощью регулярных имен тегов. Связывание имен тегов может помочь вам более глубоко перемещаться по дереву. Например, вы можете получить первую ссылку в первом абзаце данной страницы Википедии, используя soup.p.a . Все ссылки в первом абзаце можно получить, используя soup.p.find_all(‘a’) .

Вы также можете получить доступ ко всем дочерним элементам тега в виде списка с помощью tag.contents . Чтобы получить детей по определенному индексу, вы можете использовать tag.contents[index] . Вы также можете перебирать дочерние теги с помощью атрибута .children .

Оба .children и .contents полезны только тогда, когда вы хотите получить доступ к потомкам первого или первого уровня тега. Чтобы получить всех потомков, вы можете использовать атрибут .descendants .

Вы также можете получить доступ к родительскому элементу элемента, используя атрибут .parent . Аналогично, вы можете получить доступ ко всем предкам элемента, используя атрибут .parents . Родитель тега <html> верхнего уровня — это сам объект BeautifulSoup , а его родительский элемент — None .

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

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

Вы также можете перебирать всех братьев элемента с использованием .previous_siblings и .next_siblings .

Вы можете перейти к элементу, который приходит сразу после текущего элемента, используя атрибут .next_element . Чтобы получить доступ к элементу, который приходит непосредственно перед текущим элементом, используйте атрибут .previous_element .

Аналогично, вы можете перебирать все элементы, которые поступают до и после текущего элемента, используя .previous_elements и .next_elements соответственно.

Финальные мысли

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

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

Page not found

This question was removed from Stack Overflow for reasons of moderation . Please refer to the help center for possible explanations why a question might be removed.

Here are some similar questions that might be relevant:

  • How do I merge two dictionaries in a single expression (take union of dictionaries)?
  • How do I check if a list is empty?
  • How do I check whether a file exists without exceptions?
  • How to execute a program or call a system command?
  • How can I safely create a nested directory in Python?
  • How to get the current time in Python
  • How do I sort a dictionary by value?
  • How to make a flat list out of a list of lists
  • How do I list all files of a directory?

If you feel something is missing that should be here, contact us.

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *