Парсинг XML на python — Stack Overflow на русском

Вопрос следующий нужен парсинг XML файла, необходимо вытащить поочередно определенные теги, например тег name

Код следующий, не работающий

import xml.etree.ElementTree as ET
root = ET.parse('файл.xml').getroot()
for type_tag in root.findall('shop/offers/offer'):
    value = type_tag.get('name')
    print(value)

Файл тут https://sotiknadom.ru/snprice.xml

Очень прошу о помощи!

  • python
  • xml

Вариант с BeautifulSoup

# pip install bs4 lxml (если не установлены)
from bs4 import BeautifulSoup as Soup
if __name__ == '__main__':
    with open('snprice.xml', 'r', encoding='utf-8') as xml:
        soup = Soup(xml.read(), 'lxml')
    names = [offer.find('name').text for offer in soup.find_all('offer')]
    print(names, sep='\n')

А это рабочий вариант Вашей реализации:

import xml.etree.ElementTree as ET
xml_file = ET.parse('snprice.xml')
for type_tag in xml_file. findall('shop/offers/offer'):
    value = type_tag.find('name').text
    print(value)

Ну или можно немного сократить код:

from xml.etree.ElementTree import parse
print(
    *(
        type_tag.text for type_tag in parse('snprice.xml').findall('shop/offers/offer/name')
    ),
    sep='\n'
)

Не рекомендуется, если не уверены в исходных данных и нужны какие либо проверки в ходе выполнения

1

Всем, кто столкнется с такой структурой XML:

<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">
<title>SotikNadom</title>
<link rel="alternate" type="text/html">https://sotiknadom.ru/</link>
<updated>2020-08-01T06:03:43Z</updated>
<entry >
**<g:**title>Монитор Acer K242HLbd (черный)</g:title>
**<g:**link>https://sotiknadom.ru/monitory/monitor-acer-k242hlbd-chernyj</g:link>
**<g:**price>8800.
00 RUB</g:price> **<g:**id>51</g:id> **<g:**availability>in stock</g:availability> **<g:**condition>new</g:condition>

Делать так:

import xml.etree.ElementTree as ET
xml_file = ET.parse('sngoogle2.xml')
for type_tag in xml_file.findall**('{http://www.w3.org/2005/Atom}entry')**:
    value = type_tag.find**('{http://base.google.com/ns/1.0}price')**.text
    print(value)

Документация: https://docs.python.org/3/library/xml.etree.elementtree.html#parsing-xml-with-namespaces

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

python — Парсер всех XML файлов в папке

Вопрос задан

1 год 2 месяца назад

Изменён 10 месяцев назад

Просмотрен 309 раз


Есть задача — сделать парсер для всех XML файлов, лежащих в папке на рабочем столе, используя BS4 и/или LXML. Я новичок в этом вопросе, и единственное, на что хватило чтения документации — написать парсер для одного документа. А нужен такой, который пройдется по всем файлам (их слишком много, в ручную никогда не переписать, ибо файлы копились годами).

Ближе к сути — мой парсер считывает 4 тега в документе, и в дальнейшем он должен считывать теги вообще всех файлов, и сепарировать их по спискам (условный тег в список 1, в список 2 и т.д. Пример текущего скрипта для парсинга 1 файла:

from bs4 import BeautifulSoup
import lxml
with open("C:/Users/user/Desktop/folder/file.xml") as file:
    src = file.read()
soup = BeautifulSoup(src, "lxml")
uid = soup.find("prop", attrs={'name':'uid'})
print(uid.text)
language = soup.find("prop", attrs={'name':'language'})
print(language.text)
source = soup.find("prop", attrs={'name':'source'})
print(source.text)
PROFILE_URL = soup.find('PROFILE_URL')
print(PROFILE_URL)

Как это можно реализовать? Уже весь мозг себе сломал с этим парсингом.

.. Чукча не Senior, тапками не кидаться :))

  • python
  • парсер
  • bs4
  • lxml

Теперь составьте список из xml файлов и пройдитесь по нему в цикле вставляя в вашу функцию путь к файлу .

import os
f = r"C:/Users/user/Desktop/folder"
e = r".xml"
g = [os.path.join(f, _) for _ in os.listdir(f) if   _.endswith(e)]
for a in g:
    with open(a, encoding="utf-8") as file:
        src = file.read()
.....

9

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Expat XML Parser скачать | SourceForge.

net

Библиотека быстрого парсера XML на C

Прислано вам: фдрейк, работа, квацлав

По состоянию на 09.01.2022 этот проект можно найти здесь.

Загрузить

Получить обновления

Поделиться

Windows Мак линукс BSD ХромОС

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ, что мы находимся в процессе перехода на GitHub: https://github.com/libexpat/libexpat

Это библиотека синтаксического анализатора XML Expat Джеймса Кларка на C. со структурой, которую парсер
обнаруживает в документе.

ОБРАТИТЕ ВНИМАНИЕ, что мы находимся в процессе перехода на GitHub: https://github.com/libexpat/libexpat

Деятельность по проекту

Просмотреть все действия >

{{ this.obj.activity_extras.summary }}

{{/каждый}}

Категории

XML, Интернет, синтаксические анализаторы XML

Лицензия

Лицензия MIT

Следите за парсером Expat XML

Веб-сайт Expat XML Parser

API с приоритетом конфиденциальности, который прогнозирует глобальные потребительские предпочтения

Qloo AI повышает ценность широкого круга компаний из списка Fortune 500 в медиа-, технологическом, потребительском, гостиничном и автомобильном секторах.

С помощью нашего API мы предоставляем контекстную персонализацию и информацию, основанную на глубоком понимании поведения потребителей и более чем 575 миллионов людей, мест и вещей.

Узнать больше

Оцените этот проект

Войдите, чтобы оценить этот проект

Рейтинг пользователей

4,8 из 5 звезд

★★★★★

★★★★

★★★

★★

легкость 1 из 5 2 из 5 3 из 5 4 из 5 5 из 5 3 / 5

особенности 1 из 5 2 из 5 3 из 5 4 из 5 5 из 5 2 / 5

дизайн 1 из 5 2 из 5 3 из 5 4 из 5 5 из 5 2 / 5

поддержка 1 из 5 2 из 5 3 из 5 4 из 5 5 из 5 2 / 5

Отзывы пользователей

Отфильтровать отзывы:

Все

  • Пожалуйста, не обращайте внимания на «отзыв» от debguy — он очень запутался. В этих файлах НЕТ заявлений от Microsoft: debguy обнаружил, что авторы включили файлы проекта, так что, если хотите, вы можете использовать Visual Studio для сборки исходного кода.

    Его ссылка на «Tailand» (sic), кажется, исходит из уведомления об авторских правах, в котором упоминается «Thai Open Source Software Center Ltd», что является просто названием компании Джеймса Кларка (Кларк родился в Великобритании и живет в Таиланде, что делает он эмигрант, конечно). Экспат — превосходная работа.

    5 пользователей считают этот отзыв полезным.

  • был оставлен с авторским правом Tailand, Microsoft заявляет права собственности на проект (см. Лицензирование Microsoft, файлы разработчика Microsoft включены). Авторские права Ларри Уолла и Джеймса Кларка были УДАЛЕНЫ. Спасибо Тайланду за то, что он дал нам, американцам, право использовать нашу собственную работу! было много новых ошибок, регрессий и исправлений старых ошибок, которые они создали. путаница с продуктом: этот «продукт» намеренно украл имя и сходство с подлинным продуктом, создавая препятствия и мошеннические лицензии / права собственности: он содержит фальсификацию. я не говорю, что это работает (это работало до того, как они его получили). я говорю, что это НЕ БЕСПЛАТНАЯ, а также украденная работа. это было бы менее фальшивым, если бы оно не было на сайте UNIX ORIGIN (Source Forge) и если бы разработчики Microsoft не изменили новые версии, чтобы указать группам unix, чтобы получить копию expat, которая была сильно подделана.

  • Expat — это предпочтительный синтаксический анализатор, используемый многими проектами более высокого уровня (например, синтаксический анализ DOM) для фактического физического синтаксического анализа. Он очень эффективен, очень надежен, хорошо протестирован и соответствует стандартам. Помимо этого, есть и другие отличные варианты, но вы не ошибетесь, выбрав эмигранта.

  • Здравствуйте, Можете ли вы объяснить мне, как использовать SAX этой библиотеки для анализа XML-документа. зная, что я новичок в c. Спасибо

  • Отличный софт, спасибо всем причастным к его разработке!

Читать больше отзывов >

Дополнительные сведения о проекте

Предполагаемая аудитория
Разработчики
Язык программирования
C 21 августа 2000 г.

Сообщить о неприемлемом содержимом

Преобразование анализатора XML

Когда служба интеграции обрабатывает преобразование анализатора XML, она считывает строку данных XML, анализирует XML и возвращает данные через выходные группы. Преобразование XML Parser возвращает данные, отличные от XML, в транзитных портах. Вы можете анализировать XML-сообщения из таких источников, как JMS или IBM WebSphere MQ. Преобразование XML Parser является активным преобразованием.

Преобразование Анализатор XML имеет одну входную группу и одну или несколько выходных групп. Входная группа имеет один входной порт, DataInput, который принимает XML-документ в виде строки.

При создании преобразования синтаксического анализатора XML используйте мастер XML для импорта файла схемы XML, DTD или XML. Например, вы можете импортировать следующий DTD-файл сотрудника:

 

Преобразование Анализатор XML показывает корневое представление X_Employees, где X_Employees отображается как родитель X_Employee. X_Employee является родителем X_Salary, X_Phone и X_Email.

На следующем рисунке показано преобразование синтаксического анализатора XML, которое создает конструктор, если вы выбираете создание отношений сущностей:

Дизайнер создает корневое представление X_Employees. X_Employees является родителем X_Employee. X_Employee является родителем X_Salary, X_Phone и X_Email.

Каждое представление в преобразовании анализатора XML имеет по крайней мере один ключ для установления связи с другим представлением. Если вы не назначите ключи в редакторе XML, конструктор создаст первичный и внешний ключи для каждого представления. Ключи имеют тип данных bigint. Ключи называются сгенерированными ключами, поскольку служба интеграции создает значения ключей каждый раз, когда возвращает строку из преобразования анализатора XML.

Когда Designer создает столбец первичного или внешнего ключа, он назначает имя столбца с префиксом. В определении XML используется префикс XPK_ для сгенерированного столбца первичного ключа и XFK_ для сгенерированного столбца внешнего ключа.