2012-03-28 53 views
-2

我想從CNN的最新故事RSS訂閱中獲取最近的10,000條條目。我使用下面的Python程序要做到這一點,連接到谷歌的存檔工具如下:Google閱讀器存檔Feed無效xml?

import string 
import urllib2 
from xml.dom import minidom 

feedAddr = "http://www.google.com/reader/atom/feed/http://rss.cnn.com/rss/cnn_topstories.rss?r=n&n=1000" 

feedString = urllib2.build_opener().open(urllib2.Request(feedAddr)).read() 
xml = minidom.parseString(feedString) 
items = xml.getElementsByTagName("item") 

for item in items: 
    titleNode = item.childNodes[1] 
    linkNode = item.childNodes[3] 

    titleString = titleNode.firstChild.data 
    linkString = linkNode.firstChild.data 

    print titleString, linkString 

,我發現了以下錯誤:

xml.parsers.expat.ExpatError: mismatched tag: line 1285, column 4 

這是與谷歌的歸檔工具的問題或飼料生成器?這是我的Python代碼的問題嗎?我是從這個頁面,拼接在CNN供稿網址漸之進網址上面看到:

http://googlesystem.blogspot.com/2007/06/reconstruct-feeds-history-using-google.html

回答

3

你有沒有實際審查了urllib的返回的數據?你確定你得到一個飼料,而不是別的? Google閱讀器需要進行身份驗證,如果您嘗試加載該網址而不進行身份驗證,您將收到一個HTML錯誤頁面。試試這個:

feedString = urllib2.build_opener().open(urllib2.Request(feedAddr)).read() 
open('feed.xml', 'w').write(feedString) 

並檢查feed.xml文件。

另外,還可以從CNN直接剛剛剝離了`http://www.google.com/reader/atom/feed/」的一部分,並用搶吧:

http://rss.cnn.com/rss/cnn_topstories.rss?r=n&n=1000. 

這會返回一個有效的RSS飼料。

+0

是的,直接使用CNN RSS的建議確實值得。 – Kirill 2012-03-28 17:21:09

+0

直接點擊不起作用。它只是返回十個左右最近的故事的部分列表。您對此需要進行身份驗證,但請將瀏覽器指向http://www.google.com/reader/atom/feed/http://rss.cnn.com/rss/cnn_topstories.rss?r=n&n= 1000給我想要的。所以我只是從一個文件中打開它。 另外,你應該真的關閉你的文件。 Python在封閉之前不會真正寫入文件。 – JeremyKun 2012-03-28 20:35:04

+0

這是一個荒謬的評論,讓一個人用一段代碼來幫助你。當然*它不是一個完整的程序。 Geez ... – larsks 2012-03-28 21:16:14