爬虫项目之xml解析
1.xml是获取xml报文并且如何分析数据
xml文件如下*
<?xml version="1.0" encoding="UTF-8"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2018-03-19T03:57:44.2908045</Date>
<Author>FANBINGLIN\Administrator</Author>
<Description>开机提醒事件</Description>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<Enabled>true</Enabled>
</LogonTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>FANBINGLIN\Administrator</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
<UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>P3D</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<ShowMessage>
<Title>每日提醒</Title>
<Body>
1、掌握python基本语法,3.19-3.24
2、VBA程序研究
3、工作任务总结</Body>
</ShowMessage>
</Actions>
</Task>
解析文件如下*
#!/usr/bin/python3
#coding:utf-8
from xml.dom.minidom import parse
import xml.dom.minidom
Root = xml.dom.minidom.parse('开机提醒.xml')
# print(dir(DOMTree))
task = Root.documentElement
# print(dir())
for line in task.childNodes:
# print('line.nodeName:',line.nodeName,'line.nodeType:',line.nodeType,'line.nodeValue:',line.nodeValue,'line.normalize:',line.normalize)
# print(len(line))
# print(line)
if 3 == line.nodeType:
continue
if 'Actions' == line.nodeName:
for tmp in line.childNodes:
# print(tmp)
if 3 == tmp.nodeType:
continue
# print(tmp)
for tmp1 in tmp.childNodes:
if 3 == tmp1.nodeType:
continue
for tmp2 in tmp1.childNodes:
# print(tmp2)
# if 3 == tmp2.nodeType:
# continue
print(tmp2.nodeValue)
# for line1 in line.childNodes:
# if 3 == line1.nodeType:
# continue
# # print(line1.nodeName)
# # print(dir(line1))
# for line2 in line1.childNodes:
# if 3 == line2.nodeType:
# continue
# print(line2.nodeValue)
# print(line2.data)
效果图展示*
![](https://img.haomeiwen.com/i22651072/e8a1312b8ba501be.png)
2.xml的解析
XML 指可扩展标记语言(eXtensibleMarkupLanguage)
XML 被设计用来传输和存储数据。
XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。
它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
Python 对 XML 的解析
常见的 XML 编程接口有 DOM 和 SAX,这两种接口处理 XML 文件的方式不同,当然使用场合也不同。
Python 有三种方法解析 XML,SAX,DOM,以及 ElementTree:
1.SAX (simple API for XML )
Python 标准库包含 SAX 解析器,SAX 用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
2.DOM(Document Object Model)
将 XML 数据在内存中解析成一个树,通过对树的操作来操作XML。
3.ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。