2017-07-09 88 views
1

我試圖用feedparser解析python中的feed。但我得到的是None返回。林不知道我缺少什麼。這裏是我的代碼:如何使用Feed解析器python解析XML feed?

import feedparser 

def rss(self): 
    rss = 'https://news.google.com/news?q=fashion&output=rss' 
    feed = feedparser.parse(rss) 
    for key in feed.entries: 
     return key.title 

如果您認爲有更好的rss/xml飼料分析。請告訴我。 (IM新的Python)

print(key)顯示noneprint(len(feed.entries))還顯示none

print(feed) 
{'feed': {}, 'entries': [], 'bozo': 1, 'bozo_exception': URLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)'),)} 

print(feedparser) 
<module 'feedparser' from '/Users/User_name/python-projects/my_env/lib/python3.6/site-packages/feedparser.py'> 
+0

你回來後只循環一次迭代。爲什麼不使用列表或元組返回所有'key''標題? –

+0

嗨,山姆,即使我打印(key.title),而不是返回。它仍然導致沒有 – kevinabraham

+0

@stovfl。我更新了相應的問題 – kevinabraham

回答

0

嘗試以下基本代碼,這對我來說工作得很好,給了我在飼料中10個項目,當我跑了。或者,粘貼您正在運行的完整代碼,然後我會看一看。

+0

謝謝,我試過這只是打印'0' – kevinabraham

+0

@kevinabraham我認爲這意味着你根本無法讀取數據飼料,這不是一個Python編碼問題。如果您從網絡瀏覽器直接嘗試該URL,您會看到數據嗎? –

+0

是的,我可以。當我直接進入鏈接時,它會顯示文字「 NFE/1.0 fashion - Google新聞'...... – kevinabraham

0

找出問題實際上是與SSL握手通過添加ssl._create_default_https_context = ssl._create_unverified_context來修復它。

對於任何其他人面臨的問題。完整的代碼是:

import feedparser 
import ssl 
if hasattr(ssl, '_create_unverified_context'): 
    ssl._create_default_https_context = ssl._create_unverified_context 
rss = 'https://news.google.com/news?q=fashion&output=rss' 
feed = feedparser.parse(rss) 

print(feed) 
+0

這樣做,將允許任何擁有特權網絡位置的人能夠使用這些HTTP客戶端中的任何一個輕鬆執行鍼對Python應用程序的中間人攻擊,並隨意更改流量。 [爲stdlib http客戶端默認啓用證書驗證](https://www.python.org/dev/peps/pep-0476/) – stovfl

+0

@stovfl哦對。使用'create_default_context'而不是'_create_unverified_context'會更好嗎? – kevinabraham

+0

既不是第一個也不是第二個。我將使用'pip install urllib3 [secure]'安裝證書,閱讀[部分:證書驗證](http://urllib3.readthedocs.io/en/latest/user-guide.html?highlight=certificate) – stovfl