6

サーバー側で、実行時にランダムな Web ページから純粋なテキストを抽出する必要があります。私は Google App Engine と Readability python ポートを使用しています。それらのいくつかがあります。

  1. BeautifulSoup に基づくgfxmonk による初期バージョン
  2. gfxmonk に基づいた minvolaiによるバージョンは、lxmlへの依存関係が導入されているにもかかわらず、(minvolai によると、プロジェクト ページを参照) 高速化されていますが、BeautifulSoap ではなく lxml を使用しています。
  3. ユーリ・バブロフ別名ブリーによるバージョン。minvolai のものと同じで、lxml に依存します。 また、エンコーディングを検出するためにchardetに依存します。

私は Yuri のバージョンを使用しています。これは最新であり、活発に開発されているようです。Python 2.7 を使用して Google App Engine で実行することができました。「問題」は、純粋なテキストが必要なのに対し、HTML を返すことです。

リンク抽出に関するこの Stackoverflow 記事のアドバイスは、BeatfulSoupを使用することです。他に選択肢がなければ、そうします。私はlxmlベースのバージョンを使用しているため、BeatfulSoupはさらに別の依存関係になります。

私の質問:

  • コードを分岐せずに使用する Python Readability バージョンから純粋なテキストを取得する方法はありますか?
  • lxml、BeatifulSoap、RegExなどを使用して、Python ReadabilityのHTML結果から純粋なテキストを簡単に取得する方法はありますか?
  • 上記の答えが「いいえ」、または「はい」であるが簡単ではない場合、Python の可読性を変更する方法は何ですか。そのような変更は、そのような拡張機能を公式にするのに十分 (十分な数の人々にとって) 望ましいものですか?
4

3 に答える 3

4

それを長引かせないために、私の現在の解決策

  1. 読みやすさのポートを使用する方法が見つかりませんでした。
  2. BeautifulSoupバージョン4を使うことにしました
  3. BSにはテキストを抽出するための1つの簡単な機能があります

コード:

from bs4 import BeautifulSoup 
soup = BeautifulSoup(html) 
text =  soup.get_text() 
于 2012-06-28T06:17:39.630 に答える
4

html2text を使用できます。気の利いたツールです。

これを Python 可読性ツールと一緒に使用する方法に関するリンクを次に示します。これらはまとめて read2text と呼ばれます。

http://brettterpstra.com/scripting-readability-markdownify-for-clipping-web-pages/

お役に立てれば :)

于 2012-06-22T06:21:35.237 に答える
2

まず、読みやすい HTML コンテンツを抽出し、

html_snippet = ドキュメント(html).summary()

次に、ライブラリを使用して HTML タグを削除します。注意事項があります: 1) おそらくスペースが必要で、" <p>some text<br>other text" は " some textother text" であってはなりません-。2) " #&39;" は " " として表示し、" '"は " "&gt;として表示する必要があります>-- これは HTML エンティティの置換と呼ばれます (以下を参照)。

私は通常、bleach というライブラリを使用して、不要なタグと属性を一掃します。

cleaned_text = bleach.clean(html_snippet, tags=[])

また

cleaned_text = bleach.clean(html_snippet, tags=['i', 'b'])

すべてのタグを削除してテキストの書式設定を改善したい場合は、任意の種類の html2text ライブラリを使用する必要があります。または、独自の書式設定手順を自分で実装することもできます。

しかし、あなたは今生のアイデアを得たと思います。

漂白剤を使用した単純なテキストの書式設定の場合: たとえば、段落を " \n"、リスト項目を " " にしたい場合は、次のようにします\n -

norm_html = bleach.clean(html_snippet, tags=['p', 'br', 'li'])
replaced_html = norm_html.replace('<p>', '\n').replace('</p>', '\n')
replaced_html = replaced_html.replace('<br>', '\n').replace('<li>', '\n - ')
cleaned_text = bleach.clean(replaced_html, tags=[])

HTML タグのみを取り除き、エンティティの置換を行う正規表現 (" &gt;" は " >" など) については、https://stackoverflow.com/a/7778368/217895を参照してください。

于 2016-06-04T18:13:15.697 に答える