使用正则表达式从html中提取facebook页面

时间:2012-10-16 06:18:51

标签: python html regex

我正在尝试使用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

2 个答案:

答案 0 :(得分:1)

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

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

然后简单地说:

results = fb_re.findall(url)

为什么会这样:

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

这里我使用了一个字符集[]来匹配那里的任何东西,我使用^运算符来否定它,这意味着任何不在集合中的东西,然后我给它{{1 } \ n \ n字符,所以它会匹配www.facebook.com之后的所有内容,直到达到"然后停止。

注意 - 这会抓取嵌入的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.

答案 1 :(得分:0)

如果我假设正确,则网址始终为双引号。正确?

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

总的来说,尝试使用正则表达式解析html是一个坏主意。我建议您使用像lxml.html这样的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'