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