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



我正在尝试使用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个不同的数组中,以便以后使用。

截至目前,它正在运行,但是有更好的方法可以做到吗?

您应该看一下python-guide.org,他们有一个很好的摘要,旨在使使用XML更轻松地工作。我个人喜欢xmltodict,但这只是一个偏好的问题。

最新更新