代码之家  ›  专栏  ›  技术社区  ›  Timmy

用python抓取digg的rss提要

  •  3
  • Timmy  · 技术社区  · 16 年前

    有没有办法通过它的rss提要从digg获取链接?或者我必须得到该网站,并手动刮它与正则表达式?

    示例- 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 回复  |  直到 16 年前
        1
  •  1
  •   double-beep hudson solomon    7 年前

    看起来您需要使用diggapi来获取到故事的实际链接,而不仅仅是到Digg评论的链接。API可以提供XML或JSON格式的数据,这两种格式在python中都很容易处理-- lxml 和 simplejson 两者都很有效。

    如果你真的很想使用RSS提要,另一种选择是解析digg链接,然后从页面中删除链接——但是这样效率会降低,而且更容易中断。

    我在类似的社交新闻和博客网站上也遇到过这个问题——基本上他们希望你在阅读真实故事之前登陆他们的页面。可以理解,但从脚本的角度来看有点烦人。

        2
  •  3
  •   FogleBird    16 年前

    看一看这个 feedparser 模块。

    >>> import feedparser
    >>> d = feedparser.parse('http://feeds.digg.com/digg/popular.rss')
    >>> for entry in d.entries:
    ...     print entry.link
    ...
    http://feeds.digg.com/~r/digg/popular/~3/Hx0VATaafSw/Apple_Scaling_Final_Cut_Studio_Apps_to_Fit_Prosumers_2
    http://feeds.digg.com/~r/digg/popular/~3/mXb8b0QH3Rc/Skateboarder_Lives_Any_Man_s_Worst_Nightmare_video
    http://feeds.digg.com/~r/digg/popular/~3/61N9gFUth1k/CBS_A_bloodbath_of_cancellations
    http://feeds.digg.com/~r/digg/popular/~3/vZ3_6F1RAcI/Red_Dead_Redemption_Free_Roam_Done_Right
    (snip)
    
        3
  •  2
  •   miles82    16 年前

    你可以用 story.getInfo diggapi的方法。其中一个可能的论点是 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/
    ...