2011-09-30 14 views
2

이 페이지와 관련된 모든 피드 (RSS, 원자 등)를 추출하는 코드 스 니펫 (여기서는 언어가 중요하지 않음)을 찾고 있습니다.웹 페이지에서 피드 추출

그래서 입력은 URL이고 출력은 list of channels입니다.

페이지가 일부 정보 채널과 연결된 경우 중요 함을 의미합니다. 을 찾아야합니다.

나는 HTML 코드에서 무엇을 찾을 지, 어디에서 완전성을 찾아야 하는지를 묻고 있습니다.

답변

4

당신은 HTML 파일에 head 태그 피드를 찾아 주셔서 감사합니다. 여기에는 연관된 콘텐츠 형식과 해당 위치를 지정하는 href 특성이있는 link 태그로 지정해야합니다.

는이 같은 것을 사용할 수 파이썬을 사용하여 페이지에서 모든 피드 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 페이지에 추가 할 수 있습니다.

+0

미리보기 주셔서 감사합니다. 그러나 많은 페이지가 표준 장소를 사용하지 않으며 아마도 기발한 방식을 사용합니다. 예 : [oracle] (http://www.oracle.com/us/index.html) 웹 페이지를 방문하십시오. "기발한 방법"이 자주 사용되는 것을 알 수 있습니까? – xralf

+0

죄송하지만 RSS 피드를 나열하는 방법은 매우 표준적인 방법이 아닙니다. 이들을 프로그래밍 방식으로 찾는 유일한 방법은 전체 웹 페이지를 크롤링하는 것입니다 (즉, 모든 하이퍼 링크를 살펴보고 RSS 피드 : 컬렉션에 추가, html : 모든 하이퍼 링크를 선택하고 반복) – gurglet

+0

어떻게 링크가 있는지 확인할 수 있습니까? 실제로 채널? (원자 또는 RSS 또는 다른 것) – xralf

관련 문제