如何使用空属性值.find标记?

时间:2017-09-27 07:02:24

标签: python beautifulsoup

示例HTML

<div class="SomeClass" style="">some text<\div>

要查找此特定标记,我已尝试

text = article.find('div', attrs={'style':""})

但它会找到所有具有此属性的标记,无论是否为空。 如何指定标记“div”必须具有空的“样式”属性?

(更新)找到一个解决方案,但看起来有点难看

    text_area = article.find_all('div', attrs={'style':''})
    text = []
    for i in text_area:
        if 'style=""' in str(i):
            text.append(i.text)

还有另一种让它看起来更好的方法吗?

3 个答案:

答案 0 :(得分:0)

>>> html = '<div class="SomeClass" style="some_styel">some text<\div><div class="SomeClass" style="">some text<\div>'
>>> bs = BS(html, 'html.parser')
>>> divs = bs.find_all('div', {'style': ''})
>>> for div in divs:
...     div['style']
''

答案 1 :(得分:0)

这与基于HTML的默认解析器有关,其中每个元素都具有隐式style=''属性。如果您改为指定XML解析器(如lxml-xml),它可以工作,但是您可能无法解析HTML文档

>>> html = '<div class="SomeClass" style="">blank<\div><div class="SomeClass" style="test">test<\div><div class="SomeClass">none<\div>'
>>> article = BeautifulSoup(html, 'lxml-xml')
>>> article.find_all('div', style='')
[<div class="SomeClass" style="">blank</div>]

答案 2 :(得分:0)

我是这样做的

 matched_rctype = None
 rctypes = form.find_all("option", {'selected':''})
 for rctype in rctypes:
     try:
         rctype['selected']
         matched_rctype = rctype.contents[0]
     except KeyError:
         continue