2013-12-19 2 views
0

웹 사이트에서 RSS 링크를 찾으려고합니다. 하지만 src에 rss 단어가 포함되어 있기 때문에 내 코드는 img src 및 css 링크도 반환합니다.정규식을 사용하여 웹 페이지에서 RSS 링크 찾기

import urllib2 
import re 

website = urllib2.urlopen("http://www.apple.com/rss") 
html = website.read() 
links = re.findall('"((http)s?://.*rss.*)"',html) 
for link in links: 
print link 

답변

1
## removing from top 
html = re.sub('.*?<div id="container">', "", html) 

## remove from bottom 
html = re.sub('<div class="callout">.*', "", html) 

## then match 
links = re.findall('<li[^>]*>\s*<a href="(https?://[^"]*)"', html, re.IGNORECASE) 
## you can push the text rss inside the pattern if you want 
+0

사이트가 동일하지 않은 경우 어떻게해야합니까? 많은 웹 페이지에서이 작업을 수행하고 있습니다. – blackmamba

+0

나는 그것을 수동으로한다. 나는 이것에 대한 더 나은 해결책을 모른다. 그러나 수동으로 수행하는 게으른 경우 페이지 (rss & non-rss)에서 모든 href 링크를 구문 분석 할 수 있습니다. 그리고 HEAD 요청을 링크에 보내고 서버 응답을 검사하십시오. 'Content-Type : application/xml'이 있으면 RSS 링크임을 확인하십시오. 그러나 이것은 훨씬 느려지고 대역폭도 계산됩니다. –

0

나는 정규 표현식으로 HTML을 구문 분석하지 않는 것이 좋습니다 :

이 내 코드입니다. 웹 페이지에서 링크를 찾을 수있는 더 나은 도구가 있습니다. 내 즐겨 찾기는 lxml입니다.

import lxml.html 
root = lxml.html.fromstring(html) 
links = root.iterlinks() 
links.next() 

위의 링크를 통해 반복 할 수 있습니다. 그런 다음 링크가 RSS 피드를 참조하는지 여부를 추론해야합니다. 다음은이 작업을 수행 할 수있는 몇 가지 방법 ... URL을

  • 요청을 확인하고 사실을 확인하지 않고 응답 유형 (application/rss+xml)
  • 확인에 RSS와 관련된 키워드에 대한

    • 봐입니다 서버 응답, 뭔가 RSS인지 여부를 알 수 없습니다. http://www.example.com/f과 같은 URL은 RSS 피드 일 수 있습니다. 확인하기 전에는 확실히 알 수 없습니다.

    관련 문제