Получение rss точно такого же формата

Позвольте мне сказать прямо, я пытаюсь сделать веб-приложение для чтения похожим на Google Reader, Feedly и т. Д. Поэтому я пытаюсь получить rss с помощью python, используя библиотеку feedparser . Дело в том, что все rss веб-сайта имеют разный формат, я имею в виду, что у некоторых из них нет заголовка, у некоторых нет даты публикации в RSS. Тем не менее, я обнаружил, что digg.com/reader очень полезен, читатель digg получает rss с датой публикации и заголовком. Интересно, как эта штука работает? Кто-нибудь получил ключ или любая небольшая помощь будет оценена


person Zorig    schedule 24.04.2015    source источник


Ответы (2)


Недавно я сделал несколько проектов с библиотекой анализатора каналов, и это может быть очень неприятно, так как многие rss-каналы отличаются. Для меня больше всего работает что-то вроде этого:

#to get posts from hackaday.com
import feedparser
feed = feedparser.parse("http://www.hackaday.com/blog/feed/") #get feed from hackaday
feed = feed['items'] #Get items in feed (this is the best way I've found)
print feed[0]['title'] #print post title
print feed[0]['summary'] #print post summary
print feed[0]['published'] #print date published

Это лишь некоторые из различных «полей», которые есть в анализаторе каналов. Чтобы найти тот, который вам нужен, просто запустите эти команды в оболочке Python и посмотрите, что соответствует вашим потребностям.

person Njord    schedule 24.04.2015
comment
Спасибо за ответ, хорошо, я попробовал ваши фрагменты и получил print feed[0]['published'] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/dist-packages/feedparser.py", line 356, in __getitem__ return dict.__getitem__(self, key) KeyError: 'published' - person Zorig; 24.04.2015
comment
Я попытался получить дату публикации из этого rss, по-видимому, опубликовано< /b> поле в нем. А я застрял :) - person Zorig; 24.04.2015
comment
Хм, попробуйте запустить только оболочку python python в терминале, если вы используете * nix. (На какой ОС вы работаете?) А затем попробуйте import feedparser и т. д. и попробуйте print feed[0], чтобы увидеть все остальные элементы в объекте, к которому вы можете получить доступ. Я попробовал вашу ссылку rss, и кажется, что нет поля published. Возможно, вы захотите попробовать использовать Goose, как предложил @MirIlias. Также python может жаловаться на символы, отличные от ascii. - person Njord; 24.04.2015
comment
Да, у меня ОС на базе *nix. И спасибо за предложение, плюс попробовал на моей стороне. - person Zorig; 24.04.2015

вы можете использовать feedparser, чтобы узнать, есть ли на веб-сайте атом или rss, а затем иметь дело с каждым типом. Если на веб-сайте нет даты публикации или названия, вы можете извлечь их с помощью других библиотек, таких как goose-extractor (например:

from newspaper import Article
import feedparser

def extract_date(url):
    article = Article(url)
    article.download()
    article.parse()
    date=article.publish_date
    return date

d=feedparser.parse("http://feeds.feedburner.com/webnewsit") #an italian website
d.entries[0] # the last entry
try :
    d.entries[0].published
except AttributeError:
    link_last_entry=d.entries[0].link
    publish_date=extract_date(link_last_entry)

Дайте мне знать, если вы все еще не знаете дату публикации

person Mir Ilias    schedule 24.04.2015
comment
Спасибо за ответ. Например, я пытаюсь получить дату публикации из этого rss и в нем нет даты публикации. Что касается digg, то он получает дату публикации без проблем. - person Zorig; 24.04.2015
comment
Да, вы можете сделать это с помощью гуся, замените article.title в функции на article.publish_date - person Mir Ilias; 24.04.2015
comment
Хорошо, я сделал именно то, что вы сказали с article.publish_date , и это ничего мне не вернуло (без ошибок), поэтому я понял, что есть publish_date, но не понимаю, почему он ничего не возвращает - person Zorig; 24.04.2015
comment
ах, средство извлечения даты не реализовано в гусе до сих пор, я собираюсь отредактировать свой скрипт, чтобы вы могли извлечь publish_date с помощью другой хорошей библиотеки - person Mir Ilias; 24.04.2015
comment
Я попробовал обновленный код, все еще не получаю дату публикации - person Zorig; 25.04.2015
comment
это не работает с news.mn.. Я думаю, потому что у них нет атрибута даты публикации на их html-странице.. но это будет работать на большинстве веб-сайтов, у которых нет публикации атрибут в rss - person Mir Ilias; 25.04.2015