python处理XML字符串数据(alexa排名信息)

1、获取alexa排名数据

pagehandler = urllib.urlopen('http://data.alexa.com/data?cli=10&dat=snbamz&url=sina.com')

data = pagehandler.read()

2、获取信息为:

<!--
 Need more Alexa data?  Find our APIs here: https://aws.amazon.com/alexa/ 
-->
<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="5553" SOURCE="panel"/>
<REACH RANK="6223"/>
<RANK DELTA="+401"/>
<COUNTRY CODE="CN" NAME="China" RANK="427"/>
</SD>

</ALEXA>


3、使用xml.dom.minidom解析XML字符串

    import xml.dom.minidom

    xml_data = xml.dom.minidom.parseString(data)

    root=xml_data.documentElement

    rank = 0
    country = ''

    # 通过dom对象或根元素,再根据标签名获取元素节点,是个列表
    sd_data=root.getElementsByTagName('SD')
    if len(sd_data)<2:
        return rank,country
    for node in sd_data:
        rank_node = node.getElementsByTagName('POPULARITY')
        if rank_node:#判断是否存在属性可以使用hasAttribute函数,但判断是否存在属性我没有找到帖子说对应的函数
            rank = int(rank_node[0].getAttribute('TEXT'))

        country_node = node.getElementsByTagName('COUNTRY')
        if country_node:

            country = country_node[0].getAttribute('CODE')


4、另外还有一些可能会用到的函数

    # 节点名称
    print root.nodeName
    # 节点类型:'ELEMENT_NODE':1,元素节点; 'TEXT_NODE',文本节点; 'ATTRIBUTE_NODE',属性节点
    print root.nodeType
    # 获取某个节点下所有子节点,是个列表
    print root.childNodes
    # 获取某个元素节点的文本内容,先获取子文本节点,然后通过“data”属性获取文本内容
    name=root.getElementsByTagName('name')[0]
    name_text_node=name.childNodes[0]
    print(name_text_node.data)


参考帖子:

1、Python minidom模块(DOM写入和解析XML)

https://www.cnblogs.com/wcwnina/p/7222180.html

2、http://www.runoob.com/python/python-xml.html

3、通过官方 API 获取网站 Alexa 排名,https://www.qiansw.com/get-Alexa-Rank.html

猜你喜欢

转载自blog.csdn.net/xiaokui9/article/details/80706854