2017-07-09 89 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