从网页中提取Feed

时间:2011-09-30 07:09:06

标签: javascript python rss feeds text-extraction

我正在寻找一个代码片段(语言在这里并不重要) 提取与此页面关联的所有订阅源(RSS,原子等)。

因此输入为URL并输出list of channels

重要的是完整性,这意味着页面是否已关联某些信息渠道 应该找到它。

我最好问一下HTML代码中的内容,以及在哪里找到完整性。

谢谢

1 个答案:

答案 0 :(得分:4)

您可以在html文件的head标记中找到Feed。在那里,他们应该被指定为link标签,其中包含相关的内容类型和指定其位置的href属性。

要使用python从页面中提取所有Feed网址,您可以使用以下内容:

import urllib
from HTMLParser import HTMLParser

class FeedParser(HTMLParser):

    def __init__(self, *args, **kwargs):
        self.feeds = set()
        HTMLParser.__init__(self, *args, **kwargs)

    def handle_starttag(self, tag, attrs): 
        if tag == 'link':
            try:
                href = [attr[1] for attr in attrs if attr[0] == 'href'][0]
            except IndexError:
                return None         
            else:
                if ('type', 'application/atom+xml') in attrs or ('type', 'application/rss+xml') in attrs:
                    self.feeds.add(href)    


def get_all_feeds_from_url(url):
    f = urllib.urlopen(url)
    contents = f.read()
    f.close()

    parser = FeedParser()
    parser.feed(contents)
    parser.close()

    return list(parser.feeds)

如果您希望涵盖可以将订阅源添加到html页面的所有奇怪方式,则此代码必须进行相当多的扩展。