2014-07-20 6 views
0

저는 파이썬에서 xml을 구문 분석하는 최선의 방법을 찾고자했습니다. chatango에는 생년월일 (b 태그), 성별 (s 태그) 미니 (body 태그 및 인용) 및 위치 (l 태그)와 같은 사용자 프로필 정보가있는 xml 사이트가 있습니다. 내가하려는 것은 태그의 텍스트를 얻는 것이지만 문제는 사용자가 자신의 프로필에서 뭔가를 채우지 않으면 태그와 텍스트가 XML 사이트에없는 것입니다. 그래서 그 태그가 사이트에 있는지 확인하고 텍스트를 가져 오려고합니다. 그렇지 않다면 물음표로 바꿀 것입니다. 그래서 문제는 내가 그것을하는 더 깨끗한 방법을 찾는데 도움이 필요하다는 것입니다. 나는이 같은 몇 가지 문제를 찾고 있었지만 아무 것도 찾지 못했기 때문에 너희들이 도울 수 있기를 바란다. : PPython에서 Chatango xml 구문 분석

다음은 XML 사이트의 일부는 다음과 같습니다

이 하나가 모든 태그가 있습니다 http://ust.chatango.com/profileimg/c/r/cress/mod1.xml

그리고 일부가 하나의 예 : 여기 http://ust.chatango.com/profileimg/c/o/core/mod1.xml

을 코드 I의를 올라와서 :

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) 
+0

http://bpaste.net/show/479925/ 여기에 일치하는 코드가 더 붙여졌습니다. – Charles

답변

1

당신의 solu에는 아무런 문제가 없습니다. 기, 당신이 그것을 조금 청소기 싶어하지만 경우 :

대신

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

의 당신은 기본 지정할 수 있습니다 findtext 기능을 사용할 수 있습니다

gender = data.findtext("s", "?") 

이 성별에 적용하고 위치,하지만 나이와 미니에 대한 당신이 이미하고있는 것이 좋습니다.

+0

아아 내가 잡았다. 보통 나는 코드가 어떻게 보이는지에 대해 걱정하고 있으므로 다른 사람들의 의견을 찾는다. 도와 줘서 고마워! – Charles