我正在尝试使用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,但这只是一个偏好的问题。