もちろん、HTML ページは任意の数の Python パーサーを使用して解析できますが、特定の HTML ドキュメントから意味のあるコンテンツ (サイドバー、ナビゲーションなどを除く) を抽出する公開の解析スクリプトがないように見えることに驚いています。 .
DIV 要素と P 要素を集めて、最小限のテキスト コンテンツをチェックするようなものだと思いますが、しっかりとした実装には、私が考えもしなかったことがたくさん含まれていると確信しています。
もちろん、HTML ページは任意の数の Python パーサーを使用して解析できますが、特定の HTML ドキュメントから意味のあるコンテンツ (サイドバー、ナビゲーションなどを除く) を抽出する公開の解析スクリプトがないように見えることに驚いています。 .
DIV 要素と P 要素を集めて、最小限のテキスト コンテンツをチェックするようなものだと思いますが、しっかりとした実装には、私が考えもしなかったことがたくさん含まれていると確信しています。
Python 用のBeautiful Soupライブラリを試してください。HTMLファイルから情報を抽出するための非常に簡単な方法があります。
Web ページから一般的にデータを抽出しようとすると、同様の方法でページを作成する必要があります... しかし、同じ情報を伝えるために必要なすべての組み合わせは言うまでもなく、同一に見えるページを伝える方法はほぼ無限にあります。
抽出しようとしていた特定の種類の情報や、その他の最終目標はありましたか?
「div」マーカーと「p」マーカーのコンテンツを抽出して、ページ内のすべての情報の相対的なサイズを比較してみてください。問題は、おそらく人々が情報を 'div' と 'p' のコレクションにグループ化することです (または、少なくとも整形式の html を書いている場合はそうします!)。
情報がどのように関連しているかのツリーを形成した場合 (ノードは「p」または「div」などであり、各ノードには関連するテキストが含まれます)、何らかの分析を行って最小の「p」または「」を識別することができます。情報の大部分と思われるものを含む div'.. ?
[編集]私が提案したツリー構造にそれを入れることができれば、同様のポイントシステムを使用して暗殺者をスパムすることができます. 情報を分類しようとするいくつかのルールを定義します。いくつかの例:
+1 points for every 100 words
+1 points for every child element that has > 100 words
-1 points if the section name contains the word 'nav'
-2 points if the section name contains the word 'advert'
関連性の高いセクションを見つけたときに加算される低スコアのルールがたくさんある場合、それはかなり強力で堅牢な手法に発展する可能性があると思います。
[EDIT2]読みやすさを見ると、私が提案したこととほとんど同じように動作しているようです! テーブルをよりよく理解するために改善できるでしょうか?
templatemaker をご覧ください: http://www.holovaty.com/writing/templatemaker/
Django の創設者の 1 人によって書かれています。基本的に、いくつかのサンプル html ファイルをフィードすると、"テンプレート" が生成されます。これを使用して、異なる部分 (通常は意味のあるコンテンツ) だけを抽出できます。
以下は、Google コード ページの例です。
# Import the Template class.
>>> from templatemaker import Template
# Create a Template instance.
>>> t = Template()
# Learn a Sample String.
>>> t.learn('<b>this and that</b>')
# Output the template so far, using the "!" character to mark holes.
# We've only learned a single string, so the template has no holes.
>>> t.as_text('!')
'<b>this and that</b>'
# Learn another string. The True return value means the template gained
# at least one hole.
>>> t.learn('<b>alex and sue</b>')
True
# Sure enough, the template now has some holes.
>>> t.as_text('!')
'<b>! and !</b>'
ボイラーパイプ Web アプリケーションを使用して、その場でコンテンツをフェッチして抽出することができます。
(Google AppEngine のページに HTTP GET 要求を発行するだけでよいため、これは Python に固有のものではありません)。
乾杯、
キリスト教徒
何が意味を持ち、何が意味を持たないかは、ページのセマンティックに依存します。セマンティクスがくだらない場合、コードは意味のあるものを「推測」しません。私はあなたがコメントでリンクした可読性を使用していますが、多くのページでそれを読もうとしても結果が得られず、まともな結果について話していないことがわかります。
誰かがコンテンツをテーブルに入れたら、あなたは運命づけられています。phpbb フォーラムで読みやすさを試してみてください。私の言いたいことがわかるでしょう。
やりたい場合は、 で正規表現を<p></p>
使用するか、DOM を解析してください。