Автор оригинала: Shubham Sayon.
Вступление
HTML (гипертекстовый язык разметки) состоит из многочисленных тегов, и данные, которые нам нужны для извлечения в этих тегах. Таким образом, нам нужно найти правильные теги для извлечения того, что нам нужно. Теперь, как мы находим правильные теги? Мы можем сделать это с помощью Beautifulsoup's
методы поиска.
Красивый суп имеет многочисленные методы поиска дерева разбора. Два самых популярных и общего метода:
-
найти()
-
найти все()
Другие методы вполне похожи по их использованию. Поэтому мы будем сосредоточиться на Найти ()
и 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)
Выход:
❖ Функция
Мы можем определить функцию и передавать элемент как его аргумент. Функция возвращает Правда
В случае матча, в противном случае он возвращается Ложь
Отказ
Пример: Следующий код определяет функцию, которая возвращает Правда
Для всех классы
что также есть 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)
Выход:
❖ Аргументы ключевых слов
Так же, как Найти ()
Метод, find_all ()
Также позволяет нам найти определенные экземпляры тега. Например, если ID
Аргумент пропускается, красивые фильтры супа против каждого атрибута TAG ‘ID’ и возвращает результат соответственно.
Пример:
print(soup.find_all('a',id='java'))
Выход:
[Java]
Вы также можете передавать атрибуты как параметры словарного ключа, используя attrs
аргумент
Пример:
print(soup.find_all('a', attrs={'id': 'java'}))
Выход:
[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/”