Позвольте мне сказать прямо, я пытаюсь сделать веб-приложение для чтения похожим на Google Reader, Feedly и т. Д. Поэтому я пытаюсь получить rss с помощью python, используя библиотеку feedparser . Дело в том, что все rss веб-сайта имеют разный формат, я имею в виду, что у некоторых из них нет заголовка, у некоторых нет даты публикации в RSS. Тем не менее, я обнаружил, что digg.com/reader очень полезен, читатель digg получает rss с датой публикации и заголовком. Интересно, как эта штука работает? Кто-нибудь получил ключ или любая небольшая помощь будет оценена
Получение rss точно такого же формата
Ответы (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
Спасибо за ответ, хорошо, я попробовал ваши фрагменты и получил
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
Я попытался получить дату публикации из этого rss, по-видимому, опубликовано< /b> поле в нем. А я застрял :)
- person Zorig; 24.04.2015
Хм, попробуйте запустить только оболочку python
python
в терминале, если вы используете * nix. (На какой ОС вы работаете?) А затем попробуйте import feedparser
и т. д. и попробуйте print feed[0]
, чтобы увидеть все остальные элементы в объекте, к которому вы можете получить доступ. Я попробовал вашу ссылку rss, и кажется, что нет поля published
. Возможно, вы захотите попробовать использовать Goose, как предложил @MirIlias. Также python может жаловаться на символы, отличные от ascii.
- person Njord; 24.04.2015
Да, у меня ОС на базе *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
Спасибо за ответ. Например, я пытаюсь получить дату публикации из этого rss и в нем нет даты публикации. Что касается digg, то он получает дату публикации без проблем.
- person Zorig; 24.04.2015
Да, вы можете сделать это с помощью гуся, замените article.title в функции на article.publish_date
- person Mir Ilias; 24.04.2015
Хорошо, я сделал именно то, что вы сказали с
article.publish_date
, и это ничего мне не вернуло (без ошибок), поэтому я понял, что есть publish_date, но не понимаю, почему он ничего не возвращает
- person Zorig; 24.04.2015
ах, средство извлечения даты не реализовано в гусе до сих пор, я собираюсь отредактировать свой скрипт, чтобы вы могли извлечь publish_date с помощью другой хорошей библиотеки
- person Mir Ilias; 24.04.2015
Я попробовал обновленный код, все еще не получаю дату публикации
- person Zorig; 25.04.2015
это не работает с news.mn.. Я думаю, потому что у них нет атрибута даты публикации на их html-странице.. но это будет работать на большинстве веб-сайтов, у которых нет публикации б> атрибут в rss
- person Mir Ilias; 25.04.2015