python,正则表达式找到锚链接html

时间:2010-01-21 02:55:06

标签: python regex

我需要在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>

我想用正则表达式来做,而不是美丽的汤或类似的东西。有没有人可以使用我可以使用的片段呢?

由于

3 个答案:

答案 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. 下载所需的一个文件。
  2. 将dl'd文件放在site-packages目录或类似文件中。
  3. 享用你的汤。

答案 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">'的检查。