web-dev-qa-db-ja.com

ScalaによるWebスクレイピング

Scalaの簡潔な構文を利用するWebスクレイピングライブラリを誰かが知っているかどうか疑問に思います。これまでのところ、私は Chafe を見つけましたが、これは文書化が不十分で維持されているようです。 Scalaでスクレイピングを行っている人がいてアドバイスを受けていますか?(私は既存のScalaフレームワークに統合するのではなく、たとえば、Pythonで書かれたスクレーパー)

34
Michael Tingley

まず、JVMには大量のHTMLスクレイピングライブラリがあり、必要なのは それらの1つをpimpする(私のライブラリパターンをpimpする) です。

私が使用した4つは次のとおりです。

  • HtmlUnit-ブラウザをエミュレートし、Javascriptを実行します
  • Jericho-フォーマットを保持し、スクレイピングされたHTMLを編集する場合に最適
  • NekoHtml
  • JSoup- Scalaでは機能しませんうまくいくかも

私はセレンを使ったことがありますが、こすることはありません。 ScalaにはSeleniumのラッパーがあります

既存のJavaライブラリを半分焼き上げたものよりもひっくり返すScala lib。

12
Adam Gent

私はScala固有の推奨事項はありませんが、JVM全般については、次のことで大きな成功を収めています。

  • JSoup CSSセレクターを使用して、ドキュメントを「スクレイピング」できます。本当にいい仕事をします。
  • Tagsoup を使用して入力HTMLをXMLに取得し、XMLプロセッサを使用して「スクレイピング」します。

Tagsoupルートは実際にはScalaでうまく機能します。Scalaの組み込みXML "dsl"はかなり簡潔であるためです(perfの問題とときどき発生するAPIの奇妙さを許せば)。Tagsoupはほぼまた、他のSAXParserが宣言されていないものとして処理する多くのHTMLエンティティの組み込みの理解などの優れた機能を備えています。

tl; dr-可能な場合はJSoup + CSSセレクター、それ以外の場合はTagsoup + scala XML。遅い場合は、tagsoup最初に、次に結果をjsoupします。

8
overthink

私はグースをお勧めします: https://github.com/jiminoc/goose

それはあなたが必要とするかもしれないほど一般的な使用法ではありませんが、人気のあるサイトから記事のコンテンツをこする場合、それはそのままで動作するかもしれません。また、他のサイトをカバーするようにコードを拡張する場合に、そこから作業するためのフレームワークも提供します。

2
scalapeno