8

ランダムなニュース記事が与えられた場合、Web クローラーを作成して、存在する最大のテキスト本文を見つけて抽出したいと考えています。その意図は、ページ上の物理的なニュース記事を抽出することです。

当初の計画では、 and を使用して各タグをその値BeautifulSoup findAll(True)でソートすることでした。編集:これをhtml作業に使用しないでください。lxmlライブラリを使用してください。これはpythonベースで、BeautifulSoupよりもはるかに高速です。コマンド (すべての html タグを抽出することを意味します).getText()

しかし、これは私が例としてリストしたページのように、ほとんどのページでは機能しません。これは、たとえば段落区切りのように、テキストの大きな本文が多くの小さなタグに分割されているためです。

誰もこれについて経験がありますか?このような何かの助けは素晴らしいでしょう。

現時点では、Python と一緒に BeautifulSoup を使用していますが、他の可能性を探るつもりです。


編集: 数か月後にこの質問に戻ってきました (私は馬鹿のように聞こえました ^)、ライブラリと独自のコードの組み合わせでこれを解決しました。

以下は、このタスクに非常に役立つ python ライブラリーを、どれだけ役に立ったか順に並べたものです。

#1 goose ライブラリ高速、強力、一貫性がある #2可読性ライブラリコンテンツはまずまず、平均して goose より遅いが、boilerpipe よりは速い #3 python-boilerpipeインストールが遅くて難しい、boilerpipe ライブラリ (元は Java) に問題はないが、このライブラリは、IO 時間やエラーなどに起因する Java の別のライブラリの上に構築されているという事実に。

興味があれば、おそらくベンチマークをリリースします。


間接的に関連するライブラリ。おそらくそれらをインストールしてドキュメントを読む必要があります。

  • NLTK テキスト処理ライブラリこれは良すぎてインストールしません。HTMLツール(クリーンアップなど)とともにテキスト分析ツールを提供します。
  • lxml html/xml パーサー上記。これは、使いやすさ以外のあらゆる面で BeautifulSoup を上回っています。学ぶのは少し難しいですが、結果はそれだけの価値があります。HTML の解析にかかる時間ははるかに短く、非常に目立ちます。
  • このコードの価値は lib 自体ではなく、lib をリファレンス マニュアルとして使用して独自のクローラー/エクストラクターを構築することだと思います非常にうまくコーディング/文書化されています!

かなり遅い言語である Python を使用する価値とパワーの多くは、そのオープン ソース ライブラリから得られます。組み合わせて一緒に使用すると特に素晴らしいので、誰もがそれらを利用して、抱えている問題を解決する必要があります。

Goose ライブラリには多くの堅実なメンテナンスが行われ、アラビア語のサポートが追加されました。これは素晴らしいことです!

4

2 に答える 2

5

まさにこれを行うpython-readabilityパッケージを見ることができます。

于 2013-01-04T22:07:21.257 に答える
2

上記のすべてのコメントが証明するように、あなたは本当に正しい方法でそれを行っていません。

つまり、これはあなたが探していることを行います。

from bs4 import BeautifulSoup as BS
import requests
html = requests.get('http://www.cnn.com/2013/01/04/justice/ohio-rape-online-video/index.html?hpt=hp_c2').text
soup = BS(html)
print '\n\n'.join([k.text for k in soup.find(class_='cnn_strycntntlft').find_all('p')])

最初にすべてのタグのメイン コンテナーを検索し、次にタグ自体<p>のみを選択してテキストを取得することにより、テキストのみを引き出します。およびその他の無関係なものを<p>無視します。<script>

コメントで述べたように、これは CNN でのみ機能し、おそらくこのページのみで機能します。新しい Web ページごとに異なる戦略が必要になる場合があります。

于 2013-01-04T20:46:02.637 に答える