Рубрики
Без рубрики

Поиск дерева разбора, используя BeautifulSoup

Введение HTML (язык разметки гипертекста) состоит из многочисленных тегов, и данные, которые нам нужны для извлечения в этих тегах. Таким образом, нам нужно найти правильные теги для извлечения того, что нам нужно. Теперь, как мы находим правильные теги? Мы можем сделать это с помощью старейских методов поиска. Красивый суп имеет … Поиск дерева разбора, используя BeautifulSoup Подробнее »

Автор оригинала: Shubham Sayon.

Вступление

HTML (гипертекстовый язык разметки) состоит из многочисленных тегов, и данные, которые нам нужны для извлечения в этих тегах. Таким образом, нам нужно найти правильные теги для извлечения того, что нам нужно. Теперь, как мы находим правильные теги? Мы можем сделать это с помощью Beautifulsoup's методы поиска.

Красивый суп имеет многочисленные методы поиска дерева разбора. Два самых популярных и общего метода:

  1. найти()
  2. найти все()

Другие методы вполне похожи по их использованию. Поэтому мы будем сосредоточиться на Найти () и find_all () Методы в этой статье.

🚩 следующее Пример будет использоваться во всем этом документе, демонстрируя концепции:

html_doc = """

Searching Tree

Searching Parse Tree In BeautifulSoup

Learning Python, Java and Golang; is fun!

Please subscribe!

copyright - FINXTER

""" from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc, "html.parser")

Типы фильтров

Есть разные фильтры, которые могут быть переданы в Найти () и find_all () Методы, и решающее значение имеет четкое понимание этих фильтров, поскольку они используются снова и снова, в течение всего механизма поиска. Эти фильтры могут использоваться на основе тегов:

  • имя,
  • атрибуты,
  • На тексте строки,
  • или смесь этих.

❖ Строка

Когда мы пройдем строка к методу поиска, то Красивый суп выполняет совпадение против этой прошедшей строки. Давайте посмотрим на пример и нахожу теги

в HTML-документе:

print(soup.find_all('h1'))

Выход:

[

Searching Parse Tree In BeautifulSoup

]

❖ Регулярное выражение

Передача объекта регулярного выражения позволяет красивый суп фильтровать результаты в соответствии с этим регулярным выражением. Если вы хотите освоить концепции модуля Regex в Python, пожалуйста, обратитесь к нашему учебнику здесь.

Примечание:

  • Нам нужно импортировать Re модуль для использования регулярного выражения.
  • Чтобы получить только имя тега вместо всего содержимого (тег + контент в теге), используйте .name атрибут.

Пример: Следующий код находит все экземпляры тегов, начиная с буквы «B».

# finding regular expressions
for regular in soup.find_all(re.compile("^b")):
    print(regular.name)

Выход:

body
b

❖ Список

Несколько тегов могут быть переданы в функции поиска, используя список a, показанный в примере ниже:

Пример: Следующий код находит все теги и в документе HTML.

for tag in soup.find_all(['a','b']):
    print(tag)

Выход:

Python
Java
Golang
Please subscribe!

❖ Функция

Мы можем определить функцию и передавать элемент как его аргумент. Функция возвращает Правда В случае матча, в противном случае он возвращается Ложь Отказ

Пример: Следующий код определяет функцию, которая возвращает Правда Для всех классы что также есть ID в HTML-документе. Затем мы передаем эту функцию к find_all () Способ получения желаемого выхода.

def func(tag):
    return tag.has_attr('class') and tag.has_attr('id')


for tag in soup.find_all(func):
    print(tag)

Выход:

➠ Теперь, когда мы прошли сквозь разные фильтры, которые мы используем с методами поиска, мы хорошо оснащены, чтобы погрузиться в глубокое время в найти() и find_all () методы.

✨ Найти () Метод

Найти () Способ используется для поиска возникновения первого экземпляра тега с необходимым именем.

Синтаксис:

find(name, attrs, recursive, string, **kwargs)

Найти () Возвращает объект типа bs4.элемент. Тег Отказ

Пример:

print(soup.find('h1'), "\n")
print("RETURN TYPE OF find(): ",type(soup.find('h1')), "\n")
# note that only the first instance of the tag is returned
print(soup.find('a'))

Выход:

Searching Parse Tree In BeautifulSoup

RETURN TYPE OF find(): Python

➠ Вышеуказанная работа такая же, как и сделано Суп.h1 или суп Суп.А который также возвращает первый экземпляр данного тега. Так что, разница? Найти () Метод помогает нам найти определенный экземпляр заданного тега, используя пары клавиш, как показано в примере ниже:

print(soup.find('a',id='golang'))

Выход:

✨ find_all ( ) Метод

Мы видели, что Найти () Метод используется для поиска первого тега. Что, если мы хотим найти все экземпляры тега или многочисленные экземпляры данного тега в документе HTML? find_all () Метод помогает нам искать все теги с данным именем тега и возвращает Список типа bs4.элемент. Возбуждение Отказ Поскольку предметы возвращаются в список, их можно получить доступ с помощью своего индекса.

Синтаксис:

find_all(name, attrs, recursive, string, limit, **kwargs)

Пример: Поиск всех случаев тега «A» в документе HTML.

for tag in soup.find_all('a'):
    print(tag)

Выход:

Теперь есть многочисленные другие аргумент Помимо фильтров, которые мы уже обсуждали ранее. Давайте посмотрим на них один за другим.

❖ Имя аргумент

Как уже говорится ранее, аргумент имени может быть строка, регулярное выражение, список, функция или значение true.

Пример:

for tag in soup.find_all('p'):
    print(tag)

Выход:

Learning Python, Java and Golang; is fun!

Please subscribe!

❖ Аргументы ключевых слов

Так же, как Найти () Метод, find_all () Также позволяет нам найти определенные экземпляры тега. Например, если ID Аргумент пропускается, красивые фильтры супа против каждого атрибута TAG ‘ID’ и возвращает результат соответственно.

Пример:

print(soup.find_all('a',id='java'))

Выход:

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

Пример:

print(soup.find_all('a', attrs={'id': 'java'}))

Выход:

❖ Поиск с использованием класса CSS

Часто нам нужно найти тег, который имеет определенный класс CSS, но атрибут, Класс , это зарезервированное ключевое слово в Python. Таким образом, используя Класс Как аргумент ключевых слов даст Синтаксисная ошибка . Отказ Красивый суп 4.1.2 позволяет поискать класс CSS, используя ключевое слово класс_

Пример:

print(soup.find_all('p', class_='Secondary'))

Выход:

[

Please subscribe!

]

❖ Примечание. Приведенный выше поиск позволит вам найти все экземпляры метки P с классом «вторичный». Но вы также можете фильтровать поиски на основе нескольких атрибутов, используя словарь.

Пример:

print(soup.find_all('p', attrs={'class': 'Secondary', 'id': 'finxter'}))

Выход:

[

copyright - FINXTER

]

❖ строковый аргумент

строка Аргумент позволяет нам искать строки вместо тегов.

Пример:

print(soup.find_all(string=["Python", "Java", "Golang"]))

Выход:

['Python', 'Java', 'Golang']

❖ Предельный аргумент

find_all () Сканирование метода через весь HTML-документ и возвращает все соответствующие теги и строки. Это может быть чрезвычайно утомительным и занимает много времени, если документ большой. Итак, вы можете ограничить количество результатов, проходя в Ограничить аргумент

Пример: В примере HTML есть три ссылки, но этот код находит только первые два:

print(soup.find_all("a", limit=2))

Выход:

✨ Другие методы поиска

Мы успешно исследовали наиболее часто используемые методы поиска, то есть Найти и find_all () Отказ У красивого супа также есть другие методы поиска дерева разбора, но они очень похожи на то, что мы уже обсуждали выше. Единственные различия, где они используются. Давайте посмотрим на эти методы.

  • find_parents () и find_parent () : Эти методы используются для перемещения дерева разбора вверх и искать родитель (ы) бирки/строки.
  • find_next_siblings () и find_next_sibling () : Эти методы используются для поиска следующего брата (ы) элемента в HTML-документе.
  • find_previous_siblings () и find_previous_sibling () : Эти методы используются для поиска и итерации по поводу брата (а), которые появляются перед текущим элементом.
  • find_all_next () и find_next () : Эти методы используются для поиска и итерации по поводу брата (а), которые появляются после текущего элемента.
  • find_all_previous и find_previous () : Эти методы используются для поиска и итерации тегов и струн, которые отображаются перед текущим элементом в HTML-документе.

Пример:

current = soup.find('a', id='java')
print(current.find_parent())
print()
print(current.find_parents())
print()
print(current.find_previous_sibling())
print()
print(current.find_previous_siblings())
print()
print(current.find_next())
print()
print(current.find_all_next())
print()

Выход:

Learning Python, Java and Golang; is fun!

[

Learning Python, Java and Golang; is fun!

,

Searching Parse Tree In BeautifulSoup

Learning Python, Java and Golang; is fun!

Please subscribe!

copyright - FINXTER

Please subscribe!

, Searching Tree

Searching Parse Tree In BeautifulSoup

Learning Python, Java and Golang; is fun!

Please subscribe!

copyright - FINXTER

Please subscribe!

, Searching Tree

Searching Parse Tree In BeautifulSoup

Learning Python, Java and Golang; is fun!

Please subscribe!

copyright - FINXTER

Please subscribe!

] Python [Python] Golang [Golang,

Please subscribe!

, Please subscribe!,

copyright - FINXTER

, copyright - FINXTER,

Please subscribe!

, Please subscribe!]

Заключение

С этим мы дойдете до конца этой статьи; Я надеюсь, что после прочтения этой статьи вы сможете поискать элементы в дереве разбора! Пожалуйста, Подписаться и Оставайтесь настроиться Для более интересных статей.

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

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

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.

Вы можете связаться со мной @:

Оригинал: “https://blog.finxter.com/searching-the-parse-tree-using-beautifulsoup/”