web-dev-qa-db-ja.com

Webスクレイピング-Webページのメインコンテンツを識別する方法

(timesやbloombergなどの主要なニュースソースからの)ニュース記事のWebページを前提として、そのページのメイン記事のコンテンツを特定し、広告、メニュー、サイドバー、ユーザーコメントなど、その他のその他の要素を捨てたいと思います。

ほとんどの主要なニュースサイトで機能する一般的な方法は何ですか?

データマイニングに適したツールやライブラリは何ですか? (できればpythonベース)

46
kefeizhou

動作することが保証されている方法はありませんが、使用できる戦略の1つは、内部に最も見やすいテキストがある要素を見つけようとすることです。

7
Amber

これを行う方法はいくつかありますが、常に機能する方法はありません。最も簡単な2つは次のとおりです。

  • それが既知の有限のWebサイトセットである場合:スクレイパーで、各URLを特定のサイトの通常のURLから印刷URLに変換します(実際にはサイト間で一般化することはできません)
  • Arc90可読性アルゴリズムを使用します(参照実装はJavaScriptです) http://code.google.com/p/arc90labs-readability/ 。このアルゴリズムの短いバージョンは、pタグが含まれるdivを検索することです。一部のWebサイトでは機能しませんが、一般的にはかなり良好です。
29
gte525u

Diffbotはそれを行うための無料の(10.000 urls)APIを提供しています。そのアプローチがあなたが探しているものかどうかはわかりませんが、誰かを助けるかもしれません http://www.diffbot.com/

8
JordanBelf

少し前に私は simple Python script だけをこのタスクのために書きました。DOMの深さに基づいてテキストブロックをグループ化するためにヒューリスティックを使用します。その後、ほとんどのテキストがメインコンテンツであると見なされます。完璧ではありませんが、ニュースサイトでは一般的にうまく機能します。複数のdiv/pタグに分割されていても、記事は通常、テキストの最大のグループです。

次のようなスクリプトを使用します:python webarticle2text.py <url>

8
Cerin

Javaの解決策については、 https://code.google.com/p/boilerpipe/ をご覧ください:

Boilerpipeライブラリは、Webページのメインのテキストコンテンツの周囲の余計な「クラッタ」(ボイラープレート、テンプレート)を検出して削除するアルゴリズムを提供します。

ライブラリは、一般的なタスク(例:ニュース記事の抽出)の特定の戦略をすでに提供しており、個々の問題の設定に合わせて簡単に拡張することもできます。

しかし、ここで利用できるpythonラッパーもあります:

https://github.com/misja/python-boilerpipe

7
asmaier

RSSフィード(<link type="application/rss+xml" href="..."/>)そのページで、フィードのデータを解析してメインコンテンツを取得します。

4
nedk

次のスクリプトを確認してください。それは本当に素晴らしいです:

from newspaper import Article
URL = "https://www.ksat.com/money/philippines-stops-sending-workers-to-qatar"
article = Article(URL)
article.download()
print(article.html)
article.parse()
print(article.authors)
print(article.publish_date)
#print(article.text)
print(article.top_image)
print(article.movies)
article.nlp()
print(article.keywords)
print(article.summary)

その他のドキュメントは http://newspaper.readthedocs.io/en/latest/ および https://github.com/codelucas/newspaper にあり、インストールする必要があります使用:

pip3 install newspaper3k
3
Mona Jalal

「実際の」コンテンツをノイズから分離する別の可能性は、HTMLページの一部の HTML密度の測定 によるものです。

「実際の」コンテンツを抽出するには、しきい値を少し試す必要があります。興味深いコンテンツを特定した後、ヒューリスティックを適用してHTMLセグメントの正確な境界を指定することで、アルゴリズムを改善できると思います。

更新:上記のURLを見つけただけでは現在機能しません。 ここに別のリンクがあります archive.orgのキャッシュバージョン。

3
PhilS

私はWebページからそれをこすり取ろうとはしません-あまりにも多くのものがそれを台無しにする可能性があります-代わりにRSSフィードを公開しているWebサイトを確認してください。たとえば、GuardianのRSSフィードには、主要な記事のほとんどのテキストが含まれています。

http://feeds.guardian.co.uk/theguardian/rss

ペイウォールの裏側にあるため、ザタイムズ(ニューヨークではなくロンドンタイムズ)にあるかどうかはわかりません。頑張って...

0
Spacedman