python中的Chatango-xml解析

2024-06-17 01:15:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试用python找到最好、最干净的解析xml的方法。在chatango上有一个xml站点,其中包含用户的配置文件信息,比如出生日期(b tag)、性别(s tag)、mini(body标记和引号)和location(l标记)。我要做的是获取这些标记的文本,但是问题是如果用户没有在他们的配置文件中填写一些内容,那么标记和文本就不会出现在xml站点上。所以我试着检查一下这个标签是否在网站上,如果没有,我就把它改成一个问号。所以问题是我需要帮助找到一个更干净的方法。我已经查过一些类似的问题,但没有找到任何东西,希望你们能帮忙。:P

以下是一些xml站点:

这个有所有的标签: http://ust.chatango.com/profileimg/c/r/cress/mod1.xml

一个只有一些的例子: http://ust.chatango.com/profileimg/c/o/core/mod1.xml

我想出了一个代码:

import urllib.request
import urllib.parse
import datetime
from xml.etree import cElementTree as ET

class prof:

    def getProf(name):
        if len(name) == 1: url = "http://ust.chatango.com/profileimg/"+name+"/"+name+"/"+name+"/mod1.xml"
        elif len(name) > 1: url = "http://ust.chatango.com/profileimg/"+name[0]+"/"+name[1]+"/"+name+"/mod1.xml"
        f = urllib.request.urlopen(url)
        data = f.read().decode("utf-8")
        data = ET.parse(data).getroot()
        today = datetime.date.today()
        if data.find("s") is not None:
            gender = data.find("s").text
        else:
            gender = "?"
        if data.find("b") is not None:
            age = data.find("b").text.split("-")
            age = today.year - age[0] - ((today.month, today.day) < (age[1], age[2]))
        else:
            age = "?"
        if data.find("l") is not None:
            location = data.find("l").text
        else:
            location = "?"
        if data.find("body") is not None:
            mini = urllib.parse.unquote(data.find("body").text)
        else:
            mini = "?"
        if len(mini) < 1575:
            return "%s Info - Gender: %s, Age: %s, Location: %s <br/> %s" % (name, gender, age, location, mini)
       else:
            return "%s Info - Gender: %s, Age: %s, Location: %s <br/> Too many characters to display!" % (name, gender, age, location)

Tags: name标记comhttpagedatatodayif
1条回答
网友
1楼 · 发布于 2024-06-17 01:15:17

你的解决方案没有什么问题,但是如果你想让它更干净一点:

而不是

if data.find("s") is not None:
    gender = data.find("s").text
else:
    gender = "?"

您可以使用findtext函数来指定默认值:

^{pr2}$

这适用于性别和地理位置,但对于年龄和迷你来说,你已经在做的事情是好的。在

相关问题 更多 >