从XML迭代/获取数据的更好方法?

2024-06-25 06:59:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用python和BeautifulSoup从XML文件中获取数据。 我已经设法以我想要的方式将数据取出并格式化,但我正在努力提高我的知识。我的代码正在运行,但我一直在想,一定有更简单的方法来实现它

我的代码是:

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个不同的数组中,以便以后使用

到目前为止,它的工作,因为它应该,但有没有更好的方法来做到这一点


Tags: nameurldatathresholdcheckchannelsyncxml