Scala製Web記事抽出ツールGooseの基本的な使い方

GooseはGravity Labsが開発・公開したScalaベースのHTMLコンテンツ抽出ライブラリです。ウェブページから記事本文、タイトル、画像、公開日時などを自動で抽出でき、データ収集やテキスト分析に最適です。ここでは、Scala未経験者でもすぐに使えるよう、環境構築から実行までの流れを解説します。

開発環境の準備

まず、JDK 8以上とScala 2.10系(推奨バージョン2.10.1)をインストールしてください。次に、以下のコマンドでリポジトリをクローンし、Mavenでビルドします:

git clone https://gitcode.com/gh_mirrors/goo/goose
cd goose
mvn clean package

正常にビルドされると、target/フォルダ内にjarファイルが生成されます。

シンプルな抽出例

以下のコードは、指定URLから記事情報を取得する最小限の実装です:

import com.gravity.goose.Goose

object ArticleExtractor {
  def run(): Unit = {
    val parser = new Goose()
    val doc = parser.extractContent("https://example.com/news")
    
    println(s"見出し: ${doc.title}")
    println(s"本文: ${doc.cleanedArticleText.take(200)}...")
    println(s"画像数: ${doc.topImage.map(_ => 1).getOrElse(0)}")
    
    parser.shutdown()
  }
}

主な抽出機能

  • 本文抽出StandardContentExtractorがDOM構造を解析し、ノイズを除去して本文を特定します。
  • メイン画像検出StandardImageExtractorが記事に関連する代表画像を選定します。
  • 公開日推定PublishDateExtractorがメタタグや本文中の日付表記から公開時刻を推測します。

カスタム抽出器の設定

特定のサイト向けに抽出ロジックを変更したい場合は、設定オブジェクト経由でカスタム抽出器を注入できます:

import com.gravity.goose.{Configuration, Goose}
import com.gravity.goose.extractors.ContentExtractor

class CustomTextExtractor extends ContentExtractor {
  override def extract(content: String): String = {
    // 独自のクリーニングロジック
    content.replaceAll("<aside>.*?</aside>", "")
  }
}

val settings = new Configuration()
settings.setContentExtractor(new CustomTextExtractor())
val customParser = new Goose(settings)

テストの実行方法

プロジェクトには多数のユニットテストが含まれており、以下のように個別に実行可能です:

mvn test -Dtest=ImageExtractionSpec

主要なパッケージ構成

  • extractors/:テキスト・日付・著者情報などの抽出ロジック
  • images/:画像選定とメタデータ解析
  • network/:HTTP通信とレスポンス処理
  • text/:自然言語処理用の前処理ユーティリティ
  • utils/:汎用ヘルパー関数群

タグ: Scala Goose webscraping HTMLParser ContentExtraction

5月30日 12:06 投稿