当前位置:  开发笔记 > 编程语言 > 正文

正则表达式从HTML链接中提取URL

如何解决《正则表达式从HTML链接中提取URL》经验,为你挑选了4个好方法。

我是Python的新手.我正在学习正则表达式,但我需要帮助.

这里是HTML源代码:

http://www.ptop.se

我正在尝试编写一个只打印出来的工具http://ptop.se.你能帮我吗?



1> David..:

如果你只是在寻找一个:

import re
match = re.search(r'href=[\'"]?([^\'" >]+)', s)
if match:
    print match.group(0)

如果你有一个长字符串,并希望其中的每个模式实例:

import re
urls = re.findall(r'href=[\'"]?([^\'" >]+)', s)
print ', '.join(urls)

s您要查找的字符串在哪里匹配.

快速解释regexp位:

r'...'是一个"原始"字符串.它会阻止你像往常一样担心逃避字符.(\特别是 - 在原始字符串中a \只是一个\.在常规字符串中,\\每次都必须这样做,并且在regexp 中会变.)

" href=[\'"]?"表示匹配"href =",可能后跟一个'"."可能"因为很难说你正在看的HTML有多可怕,并且引用并不是严格要求的.

将" ()"中的下一位括起来使其成为"组",这意味着将其拆分并单独返回给我们.这只是一种说法"这是我感兴趣的模式的一部分."

" [^\'" >]+"说来匹配任何字符都没有 ',",>,或空间.本质上,这是一个URL结尾的字符列表.它让我们避免尝试编写可靠匹配完整URL的正则表达式,这可能有点复杂.

使用BeautifulSoup的另一个答案中的建议并不差,但确实引入了更高级别的外部要求.另外,它对你学习regexp的既定目标没有帮助,我认为这个特定的html解析项目只是其中的一部分.

这很容易做到:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html_to_parse)
for tag in soup.findAll('a', href=True):
    print tag['href']

无论如何,一旦你安装了BeautifulSoup.


学习正则表达式的一部分是学习何时不使用它们,这是一个你不应该使用它们的情况.

2> JosefAssad..:

不要使用正则表达式,使用BeautifulSoup.那个,或者是如此苛刻,以至于产生它,比如w3m/lynx并且回到w3m/lynx渲染的东西.首先是可能更优雅,第二次只是在一段时间内写的一些未经优化的代码上运行得更快.



3> 小智..:

这应该工作,虽然可能有更优雅的方式.

import re
url='http://www.ptop.se'
r = re.compile('(?<=href=").*?(?=")')
r.findall(url)


(?<= href = ["']).*?(?= ["'])负责单个quoated href

4> Paul D. Wait..:

John Gruber(编写Markdown,由正则表达式组成并在Stack Overflow上使用)开始生成一个识别文本URL的正则表达式:

http://daringfireball.net/2009/11/liberal_regex_for_matching_urls

如果您只想获取URL(即您并未真正尝试解析HTML),这可能比HTML解析器更轻量级.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有