Автор оригинала: Shubham Sayon.
Вступление
XML – это инструмент, который используется для хранения и транспортировки данных. Это стоять за расширяемый язык разметки. XML очень похож на HTML, и у них почти такая же структура, но они были разработаны для достижения разных целей.
- XML предназначен для Транспорт Данные во время HTML предназначены для Дисплей данные. Многие системы содержат несовместимые форматы данных. Это делает обмен данными между несовместимыми системами – это потребляемая задача для веб-разработчиков, так как большие объемы данных должны быть преобразованы. Кроме того, есть шансы, что несовместимые данные теряются. Но XML хранит данные в простом текстовом формате тем самым предоставляя Программное и аппаратное обеспечение независимый метод хранения и совместного использования данных Отказ
- Другое серьезное различие состоит в том, что теги HTML предопределены, тогда как файлы XML нет.
❖ Пример XML:
Harry Potter Albus Dumbledore Reminder It does not do to dwell on dreams and forget to live!
Как упоминалось ранее, теги XML не определены, поэтому нам нужно найти тег, который удерживает информацию, которую мы хотим извлечь. Таким образом, есть два основных аспекта, регулирующие разбор файлов XML:
- Нахождение необходимых тегов.
- Извлечение данных после идентификации тегов.
Beautifulsoup и LXML Установка
Когда дело доходит до веб-соскабливания с Python, Beautifulsoup Наиболее часто используемая библиотека. Рекомендуемый способ разброса XML-файлов с использованием BeautifulSoup – использовать Python’s lxml парсер.
Вы можете установить обе библиотеки, используя Пип Инструмент установки. Пожалуйста, посмотрите на наш Учебное пособие в блоге Чтобы узнать, как установить их, если вы хотите соскребать данные из файла XML с помощью красивого супа.
# Примечание: Прежде чем мы приступим к нашему обсуждению, пожалуйста, посмотрите на следующий файл XML, который мы будем использовать на протяжении всего курса этой статьи. (Пожалуйста, создайте файл с именем образец. atxt и скопируйте-вставьте код, приведенный ниже, чтобы практиковаться дальше.)
Bloodroot Sanguinaria canadensis 4 Mostly Shady $2.44 031599 Marsh Marigold Caltha palustris 4 Mostly Sunny $6.81 051799 Cowslip Caltha palustris 4 Mostly Shady $9.90 030699
Поиск необходимых тегов в документе XML
Поскольку теги не определены в XML, мы должны идентифицировать теги и поискать их с использованием различных методов, предоставляемых библиотекой BoseSoup. Теперь, как мы находим правильные теги? Мы можем сделать это с помощью Beautifulsoup's
методы поиска.
Красивый суп имеет многочисленные методы поиска дерева разбора. Два самых популярных и обычно используемых метода:
-
найти()
-
найти все()
У нас есть целый урок блога по двум методам. Пожалуйста, посмотрите на следующий учебник, чтобы понять, как эти методы поиска работают.
Если вы прочитали вышеупомянутую статью, вы можете легко использовать найти
и
Find_all
Методы для поиска тегов в любом месте документа XML.
Отношения между тегами
Чрезвычайно важно понимать взаимосвязь между тегами, особенно при сочетании данных из документов XML.
Три ключевых отношения в дереве разбора XML:
- Родитель : Тег, который используется в качестве справочного тега для навигации к детским тегам.
- Дети : Теги, содержащиеся в родительской теге.
- Братья и сестры Также, как указано имя, это теги, которые существуют на одном уровне дерева разбора.
Давайте посмотрим на то, как мы можем перемещаться по дереву анализа XML, используя вышеуказанные отношения.
Найти родителей
❖ родитель Атрибут позволяет нам найти родитель/справочник, как показано в примере ниже.
Пример: В следующем коде мы узнаем родителей общий
ярлык.
print(soup.common.parent.name)
Выход:
plant
Примечание: Имя
Атрибут позволяет нам извлечь имя тега вместо того, чтобы извлекать весь контент.
Найти детей
❖ дети Атрибут позволяет нам найти детский тег, как показано в примере ниже.
Пример: В следующем коде мы узнаем детей растение
ярлык.
for child in soup.plant.children: if child.name == None: pass else: print(child.name)
Выход:
common botanical zone light price availability
Поиск братьев и сестер
Тег может иметь братьев и сестер до и после него.
- ❖ previous_siblings Атрибут возвращает братья и сестры до указанного тега, а также next_siblings Атрибут возвращает братьев и сестер после него.
Пример: Следующий код находит предыдущие и следующие теги брата свет
Тег XML-документа.
print("***Previous Siblings***") for sibling in soup.light.previous_siblings: if sibling.name == None: pass else: print(sibling.name) print("\n***Next Siblings***") for sibling in soup.light.next_siblings: if sibling.name == None: pass else: print(sibling.name)
Выход:
***Previous Siblings*** zone botanical common ***Next Siblings*** price availability
Извлечение данных из тегов
К настоящему времени мы знаем, как ориентироваться и найти данные в тегах. Давайте посмотрим на атрибуты, которые помогают нам извлечь данные из тегов.
Атрибуты текста и строки
Чтобы получить доступ к текстовым значениям в тегах, вы можете использовать текст
или Строки
атрибут.
Пример: Выбудим текст из первого ценового тега, используя текст
и строка
атрибуты.
print('***PLANT NAME***') for tag in plant_name: print(tag.text) print('\n***BOTANICAL NAME***') for tag in scientific_name: print(tag.string)
Выход:
***PLANT NAME*** Bloodroot Marsh Marigold Cowslip ***BOTANICAL NAME*** Sanguinaria canadensis Caltha palustris Caltha palustris
Атрибут содержимого
Содержание Атрибут позволяет нам извлечь весь контент из тегов, то есть тег вместе с данными. Содержание
Атрибут возвращает список, поэтому мы можем получить доступ к своим элементам, используя их индекс.
Пример:
print(soup.plant.contents) # Accessing content using index print() print(soup.plant.contents[1])
Выход:
['\n',Bloodroot , '\n',Sanguinaria canadensis , '\n',4 , '\n',Mostly Shady , '\n',$2.44 , '\n',031599 , '\n']Bloodroot
Красивая печать красивый суп объект
Если вы внимательно наблюдаете, когда мы распечатаем теги на экране, у них есть вид грязной внешности. Хотя это может не иметь проблем с прямой производительностью, но лучший и структурированный стиль печати помогает нам более эффективно разбирать документ.
Следующий код показывает, как вывод выглядит при печати объекта BeautifulSoup нормально:
print(soup)
Выход:
Bloodroot Sanguinaria canadensis 4 Mostly Shady $2.44 031599 Marsh Marigold Caltha palustris 4 Mostly Sunny $6.81 051799 Cowslip Caltha palustris 4 Mostly Shady $9.90 030699
Теперь давайте будем использовать предел Способ улучшения появления нашего выхода.
print(soup.prettify())
Выход:
Bloodroot Sanguinaria canadensis 4 Mostly Shady $2.44 031599 Marsh Marigold Caltha palustris 4 Mostly Sunny $6.81 051799 Cowslip Caltha palustris 4 Mostly Shady $9.90 030699
Окончательное решение
Теперь мы хорошо разбираемся со всеми концепциями, необходимыми для извлечения данных из данного XML-документа. Настало время взглянуть на окончательный код, где мы будем извлекать Имя, ботаническое имя и цена каждого завода в нашем примере XML-документа (образец.xml).
Пожалуйста, следуйте за комментариями, а также код, приведенный ниже, чтобы иметь понимание логики, используемой в решении.
from bs4 import BeautifulSoup # Open and read the XML file file = open("sample.xml", "r") contents = file.read() # Create the BeautifulSoup Object and use the parser soup = BeautifulSoup(contents, 'lxml') # extract the contents of the common, botanical and price tags plant_name = soup.find_all('common') # store the name of the plant scientific_name = soup.find_all('botanical') # store the scientific name of the plant price = soup.find_all('price') # store the price of the plant # Use a for loop along with the enumerate function that keeps count of each iteration for n, title in enumerate(plant_name): print("Plant Name:", title.text) # print the name of the plant using text print("Botanical Name: ", scientific_name[ n].text) # use the counter to access each index of the list that stores the scientific name of the plant print("Price: ", price[n].text) # use the counter to access each index of the list that stores the price of the plant print()
Выход:
Plant Name: Bloodroot Botanical Name: Sanguinaria canadensis Price: $2.44 Plant Name: Marsh Marigold Botanical Name: Caltha palustris Price: $6.81 Plant Name: Cowslip Botanical Name: Caltha palustris Price: $9.90
Заключение
XML-документы являются важным источником транспортировки данных и, надеюсь, после прочтения этой статьи вы хорошо оборудованы для извлечения данных, которые вы хотите из этих документов. Вы можете быть соблазн посмотреть на Эта видео серия Где вы можете научиться просматривать веб-страницы.
Пожалуйста, подпишитесь и оставайся настроенными для более интересных статей в будущем.
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.
Вы можете связаться со мной @:
Оригинал: “https://blog.finxter.com/parsing-xml-using-beautifulsoup-in-python/”