代码之家  ›  专栏  ›  技术社区  ›  Joe

python,regex查找定位链接html

  •  0
  • Joe  · 技术社区  · 15 年前

    我需要一个在python中的regex来在一组较大的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 回复  |  直到 15 年前
        1
  •  4
  •   mechanical_meat nazca    15 年前

    汤对你有好处:

    >>> 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 dir或类似文件中。
    3. 喝汤吧。
        2
  •  3
  •   Corey Goldberg    15 年前

    你真的不应该用正则表达式来解析HTML。曾经。

    尝试漂亮的汤或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)
    

    我可以想出很多方法来打破这种局面。

        3
  •  1
  •   ghostdog74    15 年前

    你可以试试这个,因为你的要求很简单。不需要漂亮的汤或瑞吉丝

    >>> 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>
    

    你可以包括一张支票 '<li class="li_class">' 在if语句中。