Как разобрать xml-канал с помощью анализатора каналов python?

Я пытаюсь разобрать фид на питоне с помощью feedparser. Но все, что я получаю, это None. Я не уверен, чего мне не хватает. Вот мой код:

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-канала. Пожалуйста, дай мне знать. (Я новичок в питоне)

print(key) отображает none, а print(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'>

person kevinabraham    schedule 09.07.2017    source источник
comment
Вы возвращаетесь после всего лишь одной итерации цикла. Почему бы не вернуть все заголовки key с помощью списка или кортежа?   -  person Sam Chats    schedule 09.07.2017
comment
Привет, Сэм. Даже если я напечатаю (key.title) вместо возврата. Это по-прежнему не приводит ни к чему   -  person kevinabraham    schedule 09.07.2017
comment
@stovfl. Я обновил вопрос соответственно   -  person kevinabraham    schedule 10.07.2017
comment
@stovfl обновлен, чтобы включить результаты print(feed) и print(feedparser)   -  person kevinabraham    schedule 10.07.2017


Ответы (2)


Выяснилось, что проблема на самом деле заключалась в том, что рукопожатие 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)
person kevinabraham    schedule 10.07.2017
comment
Это позволит любому, кто имеет привилегированное положение в сети, тривиально выполнить атаку «человек посередине» на приложение Python, используя любой из этих HTTP-клиентов, и изменить трафик по своему желанию. https://www.python.org/dev/peps/pep-0476/ - person stovfl; 10.07.2017
comment
@stovfl ага. Не лучше ли использовать create_default_context вместо _create_unverified_context? - person kevinabraham; 11.07.2017
comment
Ни первое, ни второе. Я бы установил сертификаты, используя pip install urllib3[secure], прочитайте Раздел: Сертификат проверка - person stovfl; 11.07.2017

Попробуйте следующий базовый код, который отлично работает для меня и дает мне 10 элементов в ленте, когда я запускаю его.

import urllib2
import feedparser

url = "https://news.google.com/news?q=fashion&output=rss"
response = urllib2.urlopen(url).read()

print response

d = feedparser.parse(response)
    print len(d.entries)
    for item in d.entries:
        print "------"
        print item.title
        if 'subtitle' in item:
            print item.subtitle
        print item.link
        print item.description
        print item.published
        print item.id
        print item.updated
        if 'content' in item:
            print item.content

Или вставьте ПОЛНЫЙ код, который вы используете, и я посмотрю.

person AS Mackay    schedule 10.07.2017
comment
@kevinabraham Я думаю, это означает, что вы просто не можете читать данные из канала, это не проблема кодирования Python. Видите ли вы данные, если вы попробуете этот URL-адрес прямо из веб-браузера? - person AS Mackay; 10.07.2017
comment
Да, я могу. Когда я иду прямо по ссылке, она показывает текст <rss version="2.0"><channel><generator>NFE/1.0</generator><title>fashion - Google News</title>...... - person kevinabraham; 10.07.2017