Python解析XML的几种常见方法的介绍

python解析XML常见的有三种方法:
一是xml.dom.*模块,它是W3C DOM API的实现,若需要处理DOM API则该模块很适合,注意xml.dom包里面有许多模块,须区分它们间的不同;
二是xml.sax.*模块,它是SAX API的实现,这个模块牺牲了便捷性来换取速度和内存占用,SAX是一个基于事件的API,这就意味着它可以“在空中”处理庞大数量的的文档,不用完全加载进内存;
三是xml.etree.ElementTree模块(简称 ET),它提供了轻量级的Python式的API,相对于DOM来说ET 快了很多,而且有很多令人愉悦的API可以使用,相对于SAX来说ET的ET.iterparse也提供了 “在空中” 的处理方式,没有必要加载整个文档到内存,ET的性能的平均值和SAX差不多,但是API的效率更高一点而且使用起来很方便。
二、详解
解析的xml文件(country.xml):
<?xml version="1.0"?>
<data>
  <country name="Singapore">
    <rank>4</rank>
    <year>2011</year>
    <gdppc>59900</gdppc>
    <neighbor name="Malaysia" direction="N"/>
  </country>
  <country name="Panama">
    <rank>68</rank>
    <year>2011</year>
    <gdppc>13600</gdppc>
    <neighbor name="Costa Rica" direction="W"/>
    <neighbor name="Colombia" direction="E"/>
  </country>
</data>
1、xml.etree.ElementTree
ElementTree生来就是为了处理XML,
它在Python标准库中有两种实现:
一种是纯Python实现的,如xml.etree.ElementTree,
另一种是速度快一点的xml.etree.cElementTree。
注意:尽量使用C语言实现的那种,因为它速度更快,而且消耗的内存更少。从Python 3.3开始ElementTree模块会自动寻找可用的C库来加快速度,所以只需要import xml.etree.ElementTree就可以了。
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2018-09-11 16:47:26
# Project: XML
from pyspider.libs.base_handler import *
import xml.etree.ElementTree as ET
class Handler(BaseHandler):
crawl_config = {
}
@every(minutes=24 * 60)
def on_start(self):
self.crawl('http://wthrcdn.etouch.cn/WeatherApi?citykey=101010100', callback=self.index_page)
@config(age=0)
def index_page(self, response):
root = ET.fromstring(response.text) #从字符串传递xml
print (root.find('yesterday').find("date_1").text )