CSS 対応で、ブラウザが HTML をレンダリングするのと同じように動作する HTML パーサーを探しています。私は実際に element.innerText (DOM-JS) に相当するものを探しています。例を挙げましょう。次のhtmlを検討してください。
<style>
.AAA { display:inline;}
.BBB { display:none;}
.CCC { display:inline ;}
</style>
<span id="sarim">
<span class="AAA">a</span>
<span style="display:none">b</span>
c
<span class="CCC">d</span>
<div style="display:inline">e</div>
<span class="BBB">f</span>
</span>
上記のhtmlをブラウザで実行して実行すると、 document.getElementById('sarim').innerText
「acd e」が返されます。それはまさに私が必要とするものです。しかし、html パーサーを使用して html タグを削除すると、「abcdef」が返されます。css プロパティを読み取る "b" と "f" を自動的に無視するパーサーが必要です。
どのパーサーがこれをサポートするか考えていますか? ビューティフルソープを試してみた
hiddenelements = sarim.findAll(True, {'style' : 'display:none'})
for p in hiddenelements:
p.extract()
テキストを返すようになりましsarim.text
たが、これはインライン スタイルでのみ機能し、CSS クラス ベースのスタイルでは失敗する手動プロセスです。クラスはランダムになるため、これを自動的に行うインテリジェントなパーサーを探しています。
ヘッドレス wekbit (phantomjs.org) を実行し、element.innerText を使用して可視テキストを取得するというフェールセーフのアイデアを思いつきました。