【问题标题】:Extract feeds from web page从网页中提取提要
【发布时间】:2011-11-28 06:07:24
【问题描述】:

我正在寻找一个代码 sn-p(语言在这里并不重要),它将 提取与此页面关联的所有提要(RSS、Atom 等)。

所以输入是URL,输出是list of channels

重要的是完整性,这意味着页面是否关联了一些信息通道 应该可以找到的。

我最好询问在 HTML 代码中找到什么以及在哪里找到以涵盖完整性。

谢谢

【问题讨论】:

    标签: javascript python rss feed text-extraction


    【解决方案1】:

    您可以在 html 文件的 head 标记中找到提要。在那里,它们应该被指定为 link 标记,并带有关联的内容类型和指定其位置的 href 属性。

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

    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 页面的奇特方式,则必须对这段代码进行相当多的扩展。

    【讨论】:

    • 感谢sn-p,但是很多页面没有使用标准的地方,可能使用了古怪的方式。看例如在oracle 网页。你能找出常用的“奇葩方式”吗?
    • 抱歉,他们有一种非常不标准的方式来列出 RSS 提要。以编程方式找到它们的唯一方法是抓取整个网页(即浏览所有超链接并检查:如果 RSS 提要:添加到集合,如果 html:检查所有超链接并重复)
    • 我能以某种方式检查一个链接实际上是一个频道吗? (原子或 RSS 或其他)
    猜你喜欢
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2011-07-04
    • 2020-05-17
    • 2011-08-08
    相关资源
    最近更新 更多