0

我正在尝试使用 html 上的正则表达式搜索来获取网站的 facebook 页面的地址

通常链接显示为 <a href="http://www.facebook.com/googlechrome">Facebook</a>

但有时地址会是http://www.facebook.com/some.other

有时还有数字

目前我拥有的正则表达式是

'(facebook.com)\S\w+'

但它不会抓住最后两种可能性

当我希望正则表达式搜索但不获取它时,它叫什么?(例如,我希望正则表达式匹配 www.facbook.com 部分,但结果中没有该部分,只有它之后的部分

注意我使用 python 和 re 和 urllib2

4

2 回答 2

1

在我看来,您的主要问题是您对正则表达式的了解不够。

fb_re = re.compile(r'www.facebook.com([^"]+)')

然后简单地说:

results = fb_re.findall(url)

为什么这样有效:

在常规表达式中,括号中的部分()是捕获的内容,您将 www.facebook.com 部分放在括号中,因此它没有得到任何其他内容。

在这里,我使用一个字符集[]来匹配其中的任何内容,我使用^运算符来否定它,这意味着任何不在集合中的内容,然后我给它一个"字符,所以它将匹配 www.facebook.com 之后的任何内容,直到它到达 a"然后停止。

注意 - 这会捕获嵌入的 facebook 链接,如果 facebook 链接只是在纯文本页面上,您可以使用:

fb_re = re.compile(r'www.facebook.com(\S+)')

这意味着抓取任何非空白字符,因此一旦用完空白字符就会停止。

如果您担心链接以句点结尾,您可以简单地添加:

fb_re = re.compile(r'www.facebook.com(\S+)\.\s')

它告诉它搜索上面相同的内容,但是当它到达句子的末尾时停止,.然后是任何空格,如空格或输入。这样它仍然会抓取链接,/some.other但是当你有类似的东西时,/some.other.它会删除最后一个.

于 2012-10-16T07:49:21.893 回答
0

如果我假设正确,则 url 总是用双引号引起来。对?

re.findall(r'"http://www.facebook.com(.+?)"',url)

总体而言,尝试使用正则表达式解析 html 是一个坏主意。我建议您使用 html 解析器lxml.html来查找链接,然后使用urlparse

>>> from urlparse import urlparse # in 3.x use from urllib.parse import urlparse
>>> url = 'http://www.facebook.com/some.other'
>>> parse_object = urlparse(url)
>>> parse_object.netloc
'facebook.com'
>>> parse_object.path
'/some.other'
于 2012-10-16T06:34:11.787 回答