我需要在python中使用正则表达式来在更大的html集中查找链接html。
所以,如果我有:
<ul class="something">
<li id="li_id">
<a href="#" title="myurl">URL Text</a>
</li>
</ul>
我会回来的:
<a href="#" title="myurl">URL Text</a>
我想用正则表达式来做,而不是美丽的汤或类似的东西。有没有人可以使用我可以使用的片段呢?
由于
答案 0 :(得分:4)
汤对你有好处:
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup('''<ul class="something">
... <li id="li_id">
... <a href="#" title="myurl">URL Text</a>
... </li>
... </ul>''')
您可以将许多参数传递给findAll
方法;更多here。下面的一行将通过返回符合某些条件的所有链接的列表来开始。
>>> soup.findAll(href='#', title='myurl')
[<a href="#" title="myurl">URL Text</a>]
编辑:根据OP的评论,添加的信息包括:
因此,假设您只对某个类<li class="li_class">
的列表元素中的标记感兴趣。你可以这样做:
>>> soup = BeautifulSoup('''<li class="li_class">
<a href="#" title="myurl">URL Text</a>
<a href="#" title="myurl2">URL Text2</a></li><li class="foo">
<a href="#" title="myurl3">URL Text3</a></li>''') # just some sample html
>>> for elem in soup.findAll("li", "li_class"):
... pprint(elem.findAll('a')) # requires `from pprint import pprint`
...
[<a href="#" title="myurl">URL Text</a>,
<a href="#" title="myurl2">URL Text2</a>]
汤配方:
答案 1 :(得分:3)
你真的不应该使用正则表达式解析HTML ..永远。
尝试beautifulsoup或lxml。
但是......你问道。 所以一个快速而幼稚的版本可能看起来像这样:
import re
html = """
<ul class="something">
<li id="li_id">
<a href="#" title="myurl">URL Text</a>
</li>
</ul>
"""
m = re.search('(<a .*>)', html)
if m:
print m.group(1)
我可以想到很多方法会破坏。
答案 2 :(得分:1)
你可以尝试这个,因为你的要求很简单。不需要BeautifulSoup或正则表达式
>>> s="""
... <ul class="something">
... <li id="li_id">
... <a href="#" title="myurl">URL Text</a>
... </li>
... </ul>
... """
>>> for item in s.split("</a>"):
... if "<a href=" in item :
... print item [ item.find("<a href=") : ] + "</a>"
...
<a href="#" title="myurl">URL Text</a>
您可以根据需要在if语句中包含'<li class="li_class">'
的检查。