2012-06-22 5 views
3

대부분의 경우 Python, Atom으로 RSS 피드를 표시해야합니다. PHP에서 오는, $ entry-> link를 사용하면 꽤 빠르게 값을 얻을 수 있습니다. lxml은 훨씬 정확하고 빠르지 만 복잡합니다. 조사 시간이 지나면 나는 arstechnica-feed와 함께이 작업을하게됩니다 :lxml로 RSS 피드를 구문 분석하는 데 덜 고통스러운 방법입니까?

def GetRSSFeed(url): 
    out = [] 
    feed = urllib.urlopen(url) 
    feed = etree.parse(feed) 
    feed = feed.getroot() 
    for element in feed.iterfind(".//item"): 
     meta = element.getchildren() 
     title = meta[0].text 
     link = meta[1].text 
     for subel in element.iterfind(".//description"): 
      desc = subel.text 
      entry = [title,link,desc] 
      out.append(entry) 
    return out 

더 쉽게 수행 할 수 있습니까? 직접 태그에 액세스하려면 어떻게해야합니까? Feedparser는 한 줄의 코드로 작업을 완료합니다! 왜?

+2

왜 feedparser 대신 lxml을 사용합니까? lxml이 훨씬 빠르기 때문에 – bgporter

+0

입니다. – reinhardt

+0

xpath를 사용하면 쉽게 대답 할 수 있습니다. – Dikei

답변

8

피드 파서 라이브러리를 확인하십시오. 그것은 당신에게 정중 한 형식의 RSS 개체를 제공합니다.

> import feedparser 
> feed = feedparser.parse('http://feeds.marketwatch.com/marketwatch/marketpulse/') 
> print feed.keys() 
['feed', 
'status', 
'updated', 
'updated_parsed', 
'encoding', 
'bozo', 
'headers', 
'etag', 
'href', 
'version', 
'entries', 
'namespaces'] 

> len(feed.entries) 
    30 
+0

답에 감사드립니다. 나는 op에서 feedparser를 언급했다. 나는 훨씬 빨리 나온 lxml에 대해 테스트했다. 내가 지금하고 싶은 것은 태그 이름으로 아이들을 선택하는 것뿐입니다. rss.item.description.text를 좋아하십시오. 불가능한? – reinhardt

+1

원하는 것이 무엇입니까? (항목의 하위 항목 인 모든 설명을 찾으십시오.) feed.findall ('.// item // description') – guyrt

+0

묻는 질문에 대한 대답이 아닙니다. lxml을 사용하여이 어려운 방법을 수행 할 수 있습니까? – Harshit