开始学习python爬虫,xml.dom模块解析xml


1 .什么是xml?

xml即扩展标记语,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

.我们举个栗子:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
	<book>
		<title lang="eng">Harry Potter</title>
		<price>29.99</price>
	</book>
	<book>
		<title lang="eng">Learning XML</title>
		<price>39.95</price>
	</book>
</bookstore>
我们看格式很像html,但是xml比html格式严谨,并且html用来展示数据,xml用于传输和存储数据。

那么它有如下特征:

  • 它是有标签对组成,<aa></aa>
  • 标签可以有属性:<aa id='123'></aa>
  • 标签对可以嵌入数据:<aa>abc</aa>
  • 标签可以嵌入子标签(具有层级关系)

2. 获得标签属性

from xml.dom import minidom

doc = minidom.parse('book.xml')
root = doc.documentElement #获得文档对象
# print(dir(root))
print(root.nodeName) #bookstore
print(root.nodeValue) #None
print(root.nodeType) # 1  编号1,元素节点

每个节点都有它的nodeName、nodeValue、nodeType,注:nodeValue是节点的值,只对文本节点有效。
nodeType是节点类型
元素节点              Node.ELEMENT_NODE(1)
属性节点              Node.ATTRIBUTE_NODE(2)
文本节点              Node.TEXT_NODE(3)
CDATA节点               Node.CDATA_SECTION_NODE(4)
实体引用名称节点      Node.ENTRY_REFERENCE_NODE(5)
实体名称节点          Node.ENTITY_NODE(6)
处理指令节点          Node.PROCESSING_INSTRUCTION_NODE(7)
注释节点               Node.COMMENT_NODE(8)
文档节点               Node.DOCUMENT_NODE(9)
文档类型节点          Node.DOCUMENT_TYPE_NODE(10)
文档片段节点          Node.DOCUMENT_FRAGMENT_NODE(11)
DTD声明节点             Node.NOTATION_NODE(12)

3. 获得子标签

from xml.dom import minidom

doc = minidom.parse('book.xml')
root = doc.documentElement #获得文档对象
# print(dir(root))
# print(root.nodeName) #bookstore
# print(root.nodeValue) #None
# print(root.nodeType) # 1
books = root.getElementsByTagName('book')
print(type(books)) #<class 'xml.dom.minicompat.NodeList'>
for book in books:
    titles = book.getElementsByTagName('title')
    print(titles[0].childNodes[0].nodeValue)
结果:
<class 'xml.dom.minicompat.NodeList'>
Harry Potter
Learning XML

4. 获得标签属性值

from xml.dom import minidom

doc = minidom.parse('book.xml')
root = doc.documentElement #获得文档对象
# print(dir(root))
# print(root.nodeName) #bookstore
# print(root.nodeValue) #None
# print(root.nodeType) # 1
# books = root.getElementsByTagName('book')
# print(type(books)) #<class 'xml.dom.minicompat.NodeList'>
# for book in books:
#     titles = book.getElementsByTagName('title')
#     print(titles[0].childNodes[0].nodeValue)
itemlist = root.getElementsByTagName('title')
print(itemlist[0].getAttribute("lang"))
结果:eng






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>