我一直在尝试用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)
你的解决方案没有什么问题,但是如果你想让它更干净一点:
而不是
您可以使用findtext函数来指定默认值:
^{pr2}$这适用于性别和地理位置,但对于年龄和迷你来说,你已经在做的事情是好的。在
相关问题 更多 >
编程相关推荐