Выскабливание корма с помощью питона - PullRequest
3 голосов
/ 19 мая 2010

есть ли способ получить ссылку из digg через его RSS-канал? или я должен получить веб-сайт и вручную очистить его с помощью регулярных выражений?

Я хочу получить реальную ссылку, на которую указывает digg, а не на ленту комментариев, от rss.

пример - http://feeds.digg.com/~r/digg/popular/~3/Hx0VATaafSw/Apple_Scaling_Final_Cut_Studio_Apps_to_Fit_Prosumers_2

переходит к

http://www.appleinsider.com/articles/10/05/18/apple_scaling_final_cut_studio_apps_to_fit_prosumers.html

Ответы [ 4 ]

2 голосов
/ 19 мая 2010

Вы можете использовать метод story.getInfo API Digg. Одним из возможных аргументов является clean_title , который можно проанализировать по ссылке в ленте RSS. Вот пример реализации:

import feedparser
import urllib2
from xml.etree import ElementTree

rss_link = 'http://feeds.digg.com/digg/popular.rss'
api_link = 'http://services.digg.com/1.0/endpoint?method=story.getInfo&clean_title=%s'

data = feedparser.parse(rss_link)

for i, e in enumerate(data.entries, 1):
  print '%d. Digg link: %s' % (i, e.link)
  title = e.link[e.link.rfind('/') + 1 :]
  xml = urllib2.urlopen(api_link % title).read()
  tree = ElementTree.fromstring(xml)
  print '%d. Real link: %s' % (i, tree.find('story').get('link'))

... который выводит:

1. Digg link: http://feeds.digg.com/~r/digg/popular/~3/V58R-d7nd2M/Pakistan_court_bans_Facebook_site
1. Real link: http://news.bbc.co.uk/2/hi/south_asia/8691406.stm
2. Digg link: http://feeds.digg.com/~r/digg/popular/~3/LoF6h1fTtk/Britons_spend_more_webtime_reading_news_than_looking_at_porn
2. Real link: http://www.telegraph.co.uk/technology/news/7740500/Britons-spend-more-web-time-reading-news-than-looking-at-pornography.html
3. Digg link: http://feeds.digg.com/~r/digg/popular/~3/XQUD2tR-qGQ/Sludgy_oil_begins_washing_into_Lousiana_s_coastal_marshes
3. Real link: http://www.washingtonpost.com/wp-dyn/content/article/2010/05/18/AR2010051801676.html?hpid=topnews
4. Digg link: http://feeds.digg.com/~r/digg/popular/~3/4HBB7lvCpoM/Professor_examines_the_complex_evolution_of_human_morality
4. Real link: http://www.physorg.com/news193472479.html
5. Digg link: http://feeds.digg.com/~r/digg/popular/~3/9__2-MVmSp4/How_Are_America_s_Top_Companies_Taxed_Infographic
5. Real link: http://www.mint.com/blog/trends/how-are-americas-top-companies-taxed/
...
1 голос
/ 19 мая 2010

Похоже, вам нужно будет использовать Digg API для получения реальных ссылок на статьи, а не только ссылки на комментарии Digg. API может предоставлять вам данные в формате XML или JSON, оба из которых легко обрабатываются в python - lxml и simplejson оба работают хорошо.

Другой вариант, если вы действительно заинтересованы в использовании RSS-каналов, - это проанализировать ссылки digg, а затем очистить ссылки с этой страницы, но это будет менее эффективно и более подвержено взлому.

Я сталкивался с этой проблемой на похожих социальных новостях и сайтах блогов - в основном они хотят, чтобы вы попали на их страницу, прежде чем вы начнете читать реальную историю. Понятно, но немного раздражает с точки зрения сценариев.

0 голосов
/ 19 мая 2010

Посмотрите на YQL @ Yahoo ...

Вот запрос, который возвращает XML из digg

http://developer.yahoo.com/yql/console/?q=select%20title%2Clink%20from%20rss%20where%20url%3D%22http%3A%2F%2Ffeeds.digg.com%2Fdigg%2Fpopular.rss%22

Вы можете проанализировать JSON или XML.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...