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

使用BeautifulSoup的findAll搜索html元素的innerText以获得与搜索属性相同的结果?

  •  5
  • Jack  · 技术社区  · 16 年前

    例如,如果我按元素的属性(如id)进行搜索:

    soup.findAll('span',{'id':re.compile("^score_")})
    

    我得到一个匹配的整个span元素的列表(我喜欢)。

    但如果我尝试按html元素的内部文本进行搜索,如下所示:

    soup.findAll('a',text = re.compile("discuss|comment")) 
    

    我只返回元素中匹配的innerText部分,而不是像上面那样返回带有标记和属性的整个元素。

    有没有可能找到匹配的然后找到它的父母?

    谢谢。

    1 回复  |  直到 16 年前
        1
  •  6
  •   nosklo    16 年前

    你没有收到短信。你得到一个 NavigableString 带着文字。这个对象有方法去父对象,等等。

    from BeautifulSoup import BeautifulSoup
    import re
    
    soup = BeautifulSoup('<html><p>foo</p></html>')
    
    r = soup.findAll('p', text=re.compile('foo'))
    
    print r[0].parent
    

    <p>foo</p>