Scalaの簡潔な構文を利用するWebスクレイピングライブラリを誰かが知っているかどうか疑問に思っています。これまでのところ、Chafeを見つけましたが、これは十分に文書化されておらず、維持されていないようです。誰かがScalaでスクレイピングをしてアドバイスを持っているのではないかと思います。(たとえば、Pythonで記述されたスクレーパーを使用するのではなく、既存のScalaフレームワークに統合しようとしています。)
3 に答える
まず、JVMには多数のHTMLスクレイピングライブラリがあります。必要なのは、そのうちの1つをポン引きすることです(私のライブラリパターンをポン引きします)。
私が使用した4つは次のとおりです。
- HtmlUnit-ブラウザをエミュレートし、Javascriptを実行します
- Jericho-フォーマットを保持し、スクレイプされたHTMLを編集する場合に最適です
- NekoHtml
- JSoup-
Scalaでは動作しません。うまくいくかもしれない
私はSeleniumを使用したことがありますが、スクレイピングには使用していません。Scalaにはセレンのラッパーがあります。
半分焼き上げたScalaライブラリよりも既存のJavaライブラリをポン引きすることをお勧めします。
Scala固有の推奨事項はありませんが、JVM全般については、次の点で成功しています。
- JSoup CSSセレクターを使用して、ドキュメントを「スクレイプ」できます。一緒に仕事をするのは本当にいいです。
- Tagsoupを使用して入力HTMLをXMLに変換し、XMLプロセッサを使用して「スクレイプ」します。
Tagsoupルートは実際にはScalaで非常にうまく機能します。これは、Scalaの組み込みXML「dsl」が非常に簡潔であるためです(パフォーマンスの問題と時折発生するAPIの奇妙さを許すことができれば)。また、Tagsoupは、提供されたほぼすべてのガベージドキュメントを処理します。また、他のSAXParsersが宣言されていないものとして窒息する多くのHTMLエンティティの組み込みの理解のような優れた点もあります。
tl; dr-可能であればJSoup+CSSセレクター、それ以外の場合はTagsoup +scalaXML。遅いのが問題ない場合は、最初にtagsoupを実行し、次に結果をjsoupします。
グースをお勧めします:https ://github.com/jiminoc/goose
必要なほど一般的な用途ではありませんが、人気のあるサイトから記事のコンテンツを取得している場合は、そのままで機能する可能性があります。また、他のサイトをカバーするようにコードを拡張したい場合に作業するためのフレームワークも提供します。