2

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 を使用して可視テキストを取得するというフェールセーフのアイデアを思いつきました。

4

2 に答える 2

1

Python-Webkitはどうですか?これは、WebkitのPythonバインディングです。

Python Webkit DOMプロジェクトは、HTML5などのWebkitで利用可能な全機能へのアクセスと操作に関して、Pythonをjavascriptの完全なピアにします。getElementsbyTagNameやappendChild、onclickを介したイベントコールバック、window.setTimeoutを介したタイムアウトコールバック、さらにはXMLHttpRequestを使用したAJAXなど、javascriptで実行できるすべてのことをPythonから実行することもできます。

于 2012-07-25T11:12:14.823 に答える
0

https://github.com/JamieMason/Asteriskで PhantomJS を使用して CSS 対応の HTML ミニファイアーを作成しました。目的に合わせて簡単にフォークして変更できます。

主な作業はhttps://github.com/JamieMason/Asterisk/blob/master/src/browser.jsを使用して行われます。私のユースケースでは、スタイルを調べて HTML 出力を生成しますが、代わりに innerText を返すこともできます。

于 2012-11-27T13:15:40.720 に答える