如何在python中找到网站的反向链接

时间:2013-08-14 14:19:34

标签: python regex beautifulsoup

我有点陷入这种情况,我想找到网站的反向链接,我找不到怎么做,这是我的正则表达式:

readh = BeautifulSoup(urllib.urlopen("http://www.google.com/").read()).findAll("a",href=re.compile("^http"))

我想要做的是找到反向链接,那就是找到以http开头的链接,而不是包含谷歌的链接,我无法弄清楚如何管理这个?

2 个答案:

答案 0 :(得分:4)

from BeautifulSoup import BeautifulSoup
import re

html = """
<div>hello</div>
<a href="/index.html">Not this one</a>"
<a href="http://google.com">Link 1</a>
<a href="http:/amazon.com">Link 2</a>
"""

def processor(tag):
    href = tag.get('href')
    if not href: return False
    return True if (href.find("google") == -1) else False

soup = BeautifulSoup(html)
back_links = soup.findAll(processor, href=re.compile(r"^http"))
print back_links

--output:--
[<a href="http:/amazon.com">Link 2</a>]

但是,将所有链接以http开头,然后搜索这些链接以查找其href中没有“google”的链接可能更有效:

http_links = soup.findAll('a', href=re.compile(r"^http"))
results = [a for a in http_links if a['href'].find('google') == -1]
print results

--output:--
[<a href="http:/amazon.com">Link 2</a>]

答案 1 :(得分:2)

这是匹配http网页的正则表达式,但不包括google:

re.compile("(?!.*google)^http://(www.)?.*")