2017-09-27 5 views
1

サンプルHTML.findタグで空の属性値を持つ方法この特定のタグi`veを検索するに

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

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

を試してみましたが、それはすべてのタグものは関係なく、空かどうか、この属性を持っていない見つけました。 タグ "div"を指定するには、空の "style"属性が必要ですか?


は(更新)解決策を見つけたが、それはそれは良く見えるようにする別の方法はあり

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

少し醜いですか?

+0

スーパーエレガントないHTML文書を解析することができないかもしれないが、あなたはできる 'findall'' div'タグ、ループそれらを介してXMLパーサを指定した場合'has_attr'が' style'であるかどうかチェックし、値が空文字列かどうかを確認してください... –

答えて

0

各パーツに暗黙的なstyle=''属性があるHTMLベースのデフォルトパーサーと関係があります。あなたの代わりに(lxml-xmlをのような)、それは動作しますが、その後、あなたは

>>> 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>] 
+0

私は解決策だと思いますが、ブロックで。もっと言うと、私の場合、結果は奇妙で、lxml-xmlはhtmlパーサの.find_allと同じことをしますが、文字列を返します。私は特定のhtmlのためだと思う。それにもかかわらず) – Emelien

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'] 
'' 
+0

ちょっときれいに見えますが、それでも解決策は同じです – Emelien

関連する問題