python用正则表达式提取超链接_正则表达式用Python从HTML中的href属性中提取URL

不要使用正则表达式

接受的答案中的表达错过了许多案例。除其他外,URL中可以包含unicode字符。你想要的正则表达式就在这里,在看完之后,你可能会得出结论,毕竟你并不是真的想要它。最正确的版本是一万个字符长。

不可否认,如果您从简单的非结构化文本开始,其中包含一堆URL,那么您可能需要一万个字符长的正则表达式。但如果您的输入是结构化的,请使用该结构。您声明的目标是“在锚标记的href中提取网址”。当你可以做一些更简单的事情时,为什么要使用一个长达一万字符的正则表达式呢?

改为解析HTML

对于许多任务,使用Beautiful Soup将更快更容易使用:>>> from bs4 import BeautifulSoup as Soup>>> html = Soup(s, 'html.parser')           # Soup(s, 'lxml') if lxml is installed>>> [a['href'] for a in html.find_all('a')]['http://example.com', 'http://example2.com']

如果您不想使用外部工具,也可以直接使用Python自己的内置HTML解析库。这是一个非常简单的子类HTMLParser,它完全符合您的要求:from html.parser import HTMLParserclass MyParser(HTMLParser):

def __init__(self, output_list=None):

HTMLParser.__init__(self)

if output_list is None:

self.output_list = []

else:

self.output_list = output_list    def handle_starttag(self, tag, attrs):

if tag == 'a':

self.output_list.append(dict(attrs).get('href'))

测试:>>> p = MyParser()>>> p.feed(s)>>> p.output_list['http://example.com', 'http://example2.com']

您甚至可以创建一个接受字符串,调用feed和返回的新方法output_list。与正则表达式相比,这是一种比html提取信息更强大,更可扩展的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值