为了便于后续的读取处理,这里就将信息保存在xml文件中,想到得到的文件如下:
1 <?xml version="1.0" encoding="utf-8"?>
2 <orderlist>
3 <order>
4 <customer>姓名1</customer>
5 <phone>电话1</phone>
6 <address>地址1</address>
7 <count>点餐次数1</count>
8 </order>
9 <order>
10 <customer>姓名2</customer>
11 <phone>电话2</phone>
12 <address>地址2</address>
13 <count>点餐次数2</count>
14 </order>
15 </orderlist>
Python写xml比较简单,直接使用minidom即可。
思路也比较简单,因为dom文档就是一棵树,每一个标签都是一个节点,包括文本内容也是节点,因此从根节点开始,把节点一级一级的插入即可。
在上一篇中已经将抓取的信息存入了字典orderDict中,这里我们直接在类Order中添加一个方法,将orderDict里面的每一项信息插入DOM树,然后再写入本地xml文件。
由于比较简单,直接给出代码:
1 from xml.dom.minidom import Document
2 # 将self.orderDict中的信息写入本地xml文件,参数filename是xml文件名
3 def writeInfoToXml(self, filename):
4 # 创建dom文档
5 doc = Document()
6
7 # 创建根节点
8 orderlist = doc.createElement('orderlist')
9 # 根节点插入dom树
10 doc.appendChild(orderlist)
11
12 # 依次将orderDict中的每一组元素提取出来,创建对应节点并插入dom树
13 for (k, v) in self.orderDict.iteritems():
14 # 分离出姓名,电话,地址,点餐次数
15 (name, tel, addr, cnt) = (v[0], k, v[1], v[2])
16
17 # 每一组信息先创建节点<order>,然后插入到父节点<orderlist>下
18 order = doc.createElement('order')
19 orderlist.appendChild(order)
20
21 # 将姓名插入<order>中
22 # 创建节点<customer>
23 customer = doc.createElement('customer')
24 # 创建<customer>下的文本节点
25 customer_text = doc.createTextNode(name)
26 # 将文本节点插入到<customer>下
27 customer.appendChild(customer_text)
28 # 将<customer>插入到父节点<order>下
29 order.appendChild(customer)
30
31 # 将电话插入<order>中,处理同上
32 phone = doc.createElement('phone')
33 phone_text = doc.createTextNode(tel)
34 phone.appendChild(phone_text)
35 order.appendChild(phone)
36
37 # 将地址插入<order>中,处理同上
38 address = doc.createElement('address')
39 address_text = doc.createTextNode(addr)
40 address.appendChild(address_text)
41 order.appendChild(address)
42
43 # 将点餐次数插入<order>中,处理同上
44 count = doc.createElement('count')
45 count_text = doc.createTextNode(str(cnt))
46 count.appendChild(count_text)
47 order.appendChild(count)
48
49 # 将dom对象写入本地xml文件
50 with open(filename, 'w') as f:
51 f.write(doc.toprettyxml(indent='\t', encoding='utf-8'))
52
53 return
在先调用getAllOrders方法之后,再调用writeInfoToXml即可将所有信息写入xml文件中。
如下是给节点设置属性的:
chapter.setAttribute('number', '1')