JavaとSeleniumで定期スクレイピングを自動実行する方法【cron連携】

はじめに

Webサイトの情報を定期的に取得・保存したい場合、自動スクレイピングの仕組みが非常に便利です。この記事では、JavaとSeleniumを使ってブラウザ操作を自動化し、Linuxのcronと組み合わせて、定期的にスクレイピングを実行する方法を解説します。


使用する技術

  • Java(OpenJDK 11以上推奨)
  • Selenium WebDriver(ChromeDriverなど)
  • cron(Linuxのタスクスケジューラ)

Javaでの基本的なSeleniumスクレイピング処理

Maven依存関係(pom.xml)

<dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-java</artifactId>
  <version>4.19.1</version>
</dependency>

Javaコード例:タイトルを取得

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class WebScraper {
  public static void main(String[] args) {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--headless"); // GUIを使わずに実行
    WebDriver driver = new ChromeDriver(options);

    try {
      driver.get("https://example.com");
      System.out.println("ページタイトル: " + driver.getTitle());
    } finally {
      driver.quit();
    }
  }
}

スクレイピング結果をファイル保存する

import java.io.FileWriter;
import java.io.PrintWriter;

String title = driver.getTitle();
try (PrintWriter pw = new PrintWriter(new FileWriter("output.txt", false))) {
  pw.println("取得日時: " + java.time.LocalDateTime.now());
  pw.println("ページタイトル: " + title);
}

cronで定期実行する方法(Linux)

1. 実行可能JARの作成

Mavenでビルドした後、以下のようにJARを作成します:

mvn package

2. シェルスクリプトを用意

run_scraper.sh:

#!/bin/bash
cd /home/user/scraper/
java -jar scraper.jar

3. 実行権限を付与

chmod +x run_scraper.sh

4. cronに登録(例:1時間おき)

crontab -e

以下を追加:

0 * * * * /home/user/scraper/run_scraper.sh >> /home/user/scraper/log.txt 2>&1

トラブルシューティング

  • ChromeDriverのパスが通っていないSystem.setPropertyで明示的に指定してください。
  • GUI環境がないサーバでの実行--headlessオプションを必ず指定。
  • Javaからログ出力がされない:cron環境では環境変数などに注意。

まとめ

JavaとSeleniumを使えば、動的Webサイトからの情報取得も自動化可能です。cronと連携すれば、定期スクレイピングの仕組みも簡単に構築できます。日々の情報収集や業務の自動化に、ぜひ活用してみてください。

タイトルとURLをコピーしました