Лучший способ перебрать / получить данные из XML? - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь получить данные из файла XML, используя python и BeautifulSoup. Мне удалось вывести данные и отформатировать так, как я хочу, но я пытаюсь улучшить свои знания. Мой код работает, но я продолжаю думать, должен быть более простой способ сделать это.

Мой код:

from bs4 import BeautifulSoup as soup
from urllib.request import urlopen

url = 'http://localhost:8888/00612-Waoo-Weekly-2019-Mar-11-2019-Mar-18.xml'
url_result = urlopen(url)
raw_data = url_result.read()
xml_soup = soup(raw_data, 'xml')



entities = xml_soup.findAll('entities',{})
entities = entities[0]

channel_entities = entities.findAll('entity', {"name":"*Nord* Radio Nord"})


channel_check_PMT = []


for entity in channel_entities:
    channel_name = entity['name']
    channel_site = entity['site']
    channel_blade = entity['blade']
    channel_interface = entity['interface']


    channel_check_TS_Sync = entity.findAll('check', {"name": "TS sync"})
    channel_check_PAT = entity.findAll('check', {"name": "PAT"})
    channel_check_Continuity = entity.findAll('check', {"name": "Continuity"})
    channel_check_Sync_byte = entity.findAll('check', {"name": "Sync byte"})
    channel_check_Missing_PID = entity.findAll('check', {"name": "Missing PID"})
    channel_check_PMT = entity.findAll('check', {"name": "PMT"})

    channel_check_PMT = channel_check_PMT[0]
    channel_check_PMT = str(channel_check_PMT)
    channel_check_PMT = channel_check_PMT.replace("<data>","").replace("</data>","").replace('<check name="PMT" threshold="99.9500">','').replace("</check>","").replace("\n","")
    channel_check_PMT = channel_check_PMT.strip()
    channel_check_PMT = channel_check_PMT.split(",")
print(channel_check_PMT)

Файл XML:

<entities>
    <entity name="*Nord*" site="" blade="" interface="QAM1" stream="" joinCount="1" entityType="2" serviceType="Digital Radio">
<check name="TS sync" threshold="99.9500">
        <data>090.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,2222.000,</data>
      </check>
      <check name="Sync byte" threshold="99.9500">
        <data>101.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
      </check>
      <check name="PAT" threshold="99.9500">
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
      </check>
      <check name="Continuity" threshold="99.9500">
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
      </check>
<check name="PMT" threshold="99.9500">
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
</check>
<check name="Missing PID" threshold="99.9500">
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
        <data>100.000,100.000,100.000,100.000,100.000,100.000,100.000,</data>
     </check>
    </entity>

Если я распечатываю результат, он дает мне это (Что я хочу)

['100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '100.000', '']

Этот результат ожидается. Целью этого скрипта является получение данных внутри каждого из них и добавление их в 6 различных массивов, чтобы их можно было использовать позже.

На данный момент все работает как надо, но есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 13 мая 2019

Вам следует взглянуть на python-guide.org , в них есть краткое описание некоторых библиотек, цель которых - облегчить работу с XML. Мне лично нравится xmltodict , но это просто вопрос предпочтений.

...