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

如何将内容只与属性值匹配。

  •  0
  • mkHun  · 技术社区  · 6 年前

    我试图只将内容与属性值匹配。例如,我有以下数据

    <div id='cont'>blablabla</div>
    
    <span class='cont newClass'>blablabla</div>
    
    <someothertag name='cont'>blablabla</div>
    

    从上面我想匹配包含attrValue的所有标记 cont

    为了匹配我使用了regex的任何标签,如下所示

    soup.find_all(re.compile(r'.*'),{"class":re.compile(r".*cont.*")}):
                   --------------             ------------------------
                    Match any tag              match with the string cont     
    

    但是我不知道如何使属性名的regex意味着 class,id,name,etc.

    如果我使用纯regex,它将不匹配值,如下所示

    re.findall(r'<[^>]*cont[^>]*>.+?<\/\1>',str(soup))
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   José Tomás Tocino    6 年前

    我认为不可能马上就这么做。您可以将回调传递给 find_all 在那里进行处理。类似这样的事情(未测试):

    def checker(tag):
        for attr_val in tag.attrs.values():
            if 'cont' in attr_val:
                return True
    
        return False
    
    soup.find_all(checker)