python之xml数据解析

因为项目需求需要查询一些网站的ALEXA排名,百度后得到的方法是,访问http://data.alexa.com/data?cli=10&dat=snbamz&url=%YOURURL%,可以得到如下的XML格式的数据:


<ALEXA VER="0.9" URL="sina.com/" HOME="0" AID="=" IDN="sina.com/">
<RLS PREFIX="http://" more="0">
<RL HREF="www.china.com/" TITLE="中华网科技公司"/>
<RL HREF="www.alibaba.com/" TITLE="Alibaba.com"/>
<RL HREF="www.yahoo.com/" TITLE="Yahoo!"/>
<RL HREF="www.yahoo.com.cn/" TITLE="雅虎中国 (yahoo.com.cn)"/>
<RL HREF="www.tyfo.com/" TITLE="天虎网"/>
<RL HREF="www.tom.com/" TITLE="Tom"/>
<RL HREF="www.sohu.com/" TITLE="搜狐首页"/>
<RL HREF="www.singtao.com/" TITLE="星島日報"/>
<RL HREF="www.sina.com.tw/" TITLE="台灣新浪網"/>
<RL HREF="www.sina.com.cn/" TITLE="新浪首页"/>
RLS>
<SD TITLE="A" FLAGS="" HOST="sina.com">
<TITLE TEXT="sina1.com"/>
<OWNER NAME="Sina.Com Technology(china)co., Ltd"/>
SD>
<SD>
<POPULARITY URL="sina.com/" TEXT="19624" SOURCE="panel"/>
<REACH RANK="16868"/>
<RANK DELTA="+6598"/>
<COUNTRY CODE="US" NAME="United States" RANK="5005"/>
SD>
ALEXA>

其中,标签的TEXT属性值正是网站的ALEXA排名。于是就需要在项目中利用xml解析工具提取TEXT属性值。

方法如下:

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)。

因为性能原因选用第三种方法,操作流程如下:

1.导入ElementTree

try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET

2.请求网址获取数据

        try:
            data = requests.get(url)
            if data.status_code == 200:
                # Response格式中提取xml內容
                xml_data = data.content
            else:
                raise Exception('request alexa rank failed!')

3.从xml数据变量构造ElementTree对象

root = ET.fromstring(xml_data)

4.利用xpath找到元素并提取属性

pop = root.findall('.SD/POPULARITY')
   if pop:
      print(pop[0].get('TEXT', None))

5.打完收工。

你可能感兴趣的:(python之xml数据解析)