Парсинг 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 файлов в папке
Вопрос задан
Изменён 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)
Как это можно реализовать? Уже весь мозг себе сломал с этим парсингом.
- 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
Зарегистрируйтесь или войдите
Регистрация через 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
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 для сборки исходного кода.
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_ для сгенерированного столбца внешнего ключа.