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

Разбор XML с помощью BeautifulSoup в Python

Введение XML – это инструмент, который используется для хранения и транспортировки данных. Он стоит для расширяемого языка разметки. XML очень похож на HTML, и у них почти такая же структура, но они были разработаны для достижения разных целей. XML предназначен для транспортировки данных во время HTML предназначен для отображения данных. … Разбор XML, используя красивую подпись в Python Подробнее »

Автор оригинала: 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:

  1. Нахождение необходимых тегов.
  2. Извлечение данных после идентификации тегов.

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 методы поиска.

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

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

У нас есть целый урок блога по двум методам. Пожалуйста, посмотрите на следующий учебник, чтобы понять, как эти методы поиска работают.

Если вы прочитали вышеупомянутую статью, вы можете легко использовать найти и 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/”