2013-12-19 57 views
0

我正在尝试在网站中查找rss链接。但是我的代码也会返回img src和css链接,因为它的src包含rss单词。使用正则表达式在网页中查找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

我手动做。我不知道任何更好的解决方案。但是如果你懒得手动做,那么你可以解析页面中的所有href链接(rss&non-rss)。并对链接执行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源。直到你检查,你无法确定。