はじめに
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と連携すれば、定期スクレイピングの仕組みも簡単に構築できます。日々の情報収集や業務の自動化に、ぜひ活用してみてください。