代码之家  ›  专栏  ›  技术社区  ›  Derek 朕會功夫

使用BeautifulSoup4在兄弟子树中查找

  •  2
  • Derek 朕會功夫  · 技术社区  · 8 年前

    有没有办法用BeautifulSoup在兄弟姐妹子树中找到标记?这里的场景是,我已经找到了一个我想要的标记,我需要获取另一个位于其兄弟子树中的标记。

    等效的xpath是

    #mytag ~ div span
    

    #mytag ~ div span{
      background: green;
      color: white;
    }
    <div id="mytag"></div>
    <span>nope</span>
    <div>
      <span>foo bar</span>
    </div>

    我可以找到所有兄弟姐妹使用 .find_next_siblings 但这不会搜索子树。有没有一种方法可以让我轻松地做到这一点?

    1 回复  |  直到 8 年前
        1
  •  1
  •   har07    8 年前

    您可以使用 select() 其中接受 CSS selector 要轻松完成此操作,请执行以下操作:

    mydiv.select("~ div span")
    

    快速测试:

    >>> from bs4 import BeautifulSoup
    >>> raw = '''<div>
    ... <div id="mytag"></div>
    ... <span>nope</span>
    ... <div>
    ...   <span>foo bar</span>
    ... </div>
    ... </div>'''
    >>> soup = BeautifulSoup(raw, 'lxml')
    >>> mydiv = soup.find("div", {"id": "mytag"})
    >>> mydiv.select("~ div span")
    [<span>foo bar</span>]