Извлечение каналов с веб-страницы - PullRequest
2 голосов
/ 30 сентября 2011

Я ищу фрагмент кода (язык здесь не важен), который будет извлекать все каналы (RSS, атом и т. Д.), Связанные с этой страницей.

Таким образом, ввод - URL иoutput list of channels.

Важным является полнота, это означает, что если страница связала какой-либо информационный канал, она должна быть найдена.

Я спрашиваю предпочтительно, что найти в HTML-коде и гденайти, чтобы покрыть полноту.

спасибо

1 Ответ

4 голосов
/ 30 сентября 2011

Фиды можно найти в теге head в HTML-файлах.Там они должны быть указаны как link теги со связанным типом контента и атрибутом href, указывающим его местоположение.

Чтобы извлечь все URL фидов со страницы, используя python, вы можете использовать что-то вроде этого:

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-страницу.

...