2010-02-15 2 views
1

피드 파서를 사용하여 자주 업데이트되는 (시간에 따라) 내용을 포함하는 피드를 조작하고 싶습니다. 목표는 업데이트 된 피드의 모든 콘텐츠를 표시하는 것입니다. 데이터를 구문 분석으로목록 항목을 파이썬으로 표시

import feedparser 
d = feedparser.parse("some URL") 

print "Information of user" 
i = range(10) 

for i in d: 
    print d.entries[i].summary 

print " " 

목록이며, 목록 인덱스와 같은 문자열을 허용하지 않습니다, 그것은 오류 표시 등

:

File "F:\JavaWorkspace\Test\src\rss_parse.py", line 18, in <module> 
print d.entries[i].summary 
TypeError: list indices must be integers 

그럼 어떻게 모든 내용을받을 수 있나요? 누구든지이 문제에 대해 나에게 약간의 빛을 보여 주실 수 있습니까? 미리 감사드립니다!

답변

4
for i in range(10): 
    print d.entries[i].summary 
4

i은 정수가 아닙니다. 나는 i 이미 피드의 항목입니다 생각하지만, 더 나은 이름을 변경 :

시도 : 첫 번째 10 개 항목을 원하는 경우에

for entry in d.entries: 
    print entry.summary 

당신이해야 할 :

try: 
    for i in range(10): 
    print d.entries[i].summary 
except IndexError: 
    pass 
+0

@felix : 실제로 항목 [0]은 피드 파서 모듈의 개체이며 요약은이 항목의 속성입니다 [ ] 개체를 만듭니다. 그래서 네가 말한대로 작동하지 않는 이유야. 다른 옵션있어? –

+0

@felix : 죄송하지만 도움을 주셔서 감사합니다! –

+0

@felix : 당신의 꾸밈음으로 답이 개선되지 않습니다. 나는 실제로 나의 upvote를 되찾기를 고려하고있다. 나를 멈추게하는 유일한 방법은이 질문에 대한 다른 대답이다. – SilentGhost

1

을 먼저 지정 정수 목록을 i (i = range(10))로 작성한 다음이 목록에 대한 참조를 잃어 버리십시오. 이 말은하지 않았다 확실 있습니까 : 단순히

r = range(10) 

for i in r: 

또는 모든 항목에 대한

for i in range(10): 
1

만들 :

import feedparser 
d = feedparser.parse("some URL") 

print "Information of user" 

for i in range(len(d['entries'])): 
    print d.entries[i].summary 

print " " 
1
import feedparser 
from StringIO import StringIO 
d = feedparser.parse("some URL") 
buff = StringIO() 
print >>buff, "Information of user" 

for i,e in enumerate(d.entries): 
    print >>buff, i, e.summary 

print >>buff," " 
print buff 

인덱스가 필요한 경우, 나는 또한 big s에서 I/O 연산을하기 위해 String Buffer를 사용할 것을 제안한다. ~.

0

10 개 이상인 경우 목록의 첫 번째 요소를 인쇄하거나 다른 요소가 포함 된 경우 10 개 요소를 인쇄하려고한다고합시다. 펠릭스는 예외적 인 관리를위한 해결책을 제시했다. 아래처럼 itertools를 사용할 수도 있습니다.

import feedparser 
d = feedparser.parse('http://feedparser.org/docs/examples/atom10.xml') 

from itertools import islice 

for elt in islice(d.entries, 1, 10): 
    print elt.summary 

islice의 장점은 3에서 10 (슬라이스)의 요소에 액세스하려는 경우 쉽게 작동한다는 것입니다. 그냥 1을 3으로 대체해야합니다. 심지어 요소 등을 말하기를 원한다면 단계와도 작동해야합니다.

+0

음, 그렇다면 피드 콘텐츠의 한계를 직접 알지 못한다면이 피드는 10 분마다 업데이트됩니다.이 islice를 사용하여이 모든 것을 원하십니까? –

+0

@ rahman.bd : 제한을 원하지 않으면 None을 경계로 사용할 수 있습니다. islice는 반복자이므로 여전히 원래의 객체에 액세스 할 수 있으며 명시 적 색인을 사용하면 다르지 않습니다. 그러나 당신이 당신이 설명하는 경우에 당신이 islice를 사용하지 않겠다고 제안하는 Felix 나 ifilter 같은 것은 아무것도 없을 것입니다. 만약 당신이 몇몇 피드에만 관심이 있다면. – kriss