🧭 あなたに最適なVPSを30秒で無料診断 診断する →

【2026年版】PythonのAIスクレイピングツールをVPSで定期実行(cron)させる非エンジニア向けガイド

読む前に30秒だけ。用途・予算を選ぶだけで、あなたに最適なVPSがわかります(無料・登録不要) 無料診断 →

【2026年版】PythonのAIスクレイピングツールをVPSで定期実行(cron)させる非エンジニア向けガイド


【結論を先に書く】自分がたどり着いた答え

スクレイピングの定期実行を「本当に自動化」したいなら、VPS一択です。ローカルPCでやろうとすると、スリープするたびに止まる。「じゃあスリープ切って24時間つけっぱなしに…」は精神的にずっと気になるし、何かあったらリモートデスクトップで入らなきゃいけないから全然手放しにならない。それで半年近く遠回りしました。

VPS選びについても先に書いておきます。

  • 週数時間だけ動かすなら → KAGOYA CLOUD VPS(時間課金で安い)
  • 1日中ほぼ動かすなら → XServer VPS(月830円固定の安心感)
  • 損益分岐点は「月76時間」。これ以上使うならXServer、未満ならKAGOYAのほうが安上がり

あと、このスクレイピング用途にGPUは完全に不要です。ごくたまにGPU付きVPSを勧めてる記事を見かけますが、正直あれはアフィリエイト報酬が高い商品を売りたいだけだと思っています。テキスト取得とcron実行にGPUはいりません。無駄にお金を使わないでください。


なぜVPSが必要なのか

実体験から言うと、自分も最初はローカルPCでやろうとしていました。でも結局、こういう問題にぶつかります。

環境問題点
ローカルPCPCがスリープ・シャットダウンで停止
Google Colab無料プランは90分でセッション切れ
VPS24時間365日、cronで自動実行できる

「PCつけっぱなしでいいじゃん」と思うかもしれないけど、寝てる間・外出中も何かあれば自分で対処しなきゃいけない。それって「自動化できてる」とは言えないんですよね。VPSに投げてしまえば、本当に放置できる。その差は体験してみないとわかりづらいんですが、一度やると戻れません。


基本スクレイピングスクリプトを作る

AIに書いてもらったスクリプトをそのままコピペするのもOKです。ただ、ログの出力先だけは最初に確認しておいてください。後で「動いてるのか動いてないのかわからない」という状況になりがちです。自分がそうでした。

BeautifulSoupによるHTML解析(静的サイト向け)

JavaScriptを使っていないシンプルなサイトならBeautifulSoupで十分です。軽いし、エラーも少ない。最初はこっちから試してみることをすすめます。

#!/usr/bin/env python3
# scraper.py

import requests
from bs4 import BeautifulSoup
import datetime
import logging

# ログ設定
logging.basicConfig(
    filename="/var/log/scraper.log",
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s"
)

TARGET_URL = "https://example.com/products"

def scrape():
    try:
        res = requests.get(TARGET_URL, timeout=10,
                           headers={"User-Agent": "Mozilla/5.0"})
        res.raise_for_status()
        soup = BeautifulSoup(res.text, "html.parser")

        items = soup.select(".product-item")
        for item in items:
            name = item.select_one(".name").text.strip()
            price = item.select_one(".price").text.strip()
            logging.info(f"商品名: {name} | 価格: {price}")

        print(f"[{datetime.datetime.now()}] {len(items)}件取得完了")

    except Exception as e:
        logging.error(f"エラー: {e}")
        raise

if __name__ == "__main__":
    scrape()

Seleniumによる動的サイトのスクレイピング

Amazonの価格やログイン後のページなど、JavaScriptで描画されるサイトはBeautifulSoupでは取れません。そういうときはSeleniumを使います。ただ、Seleniumはセットアップがちょっと面倒で、VPS上でのメモリ消費も多め。まずBeautifulSoupで試して、取れなかったときだけSeleniumに切り替えるのが現実的です。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

def scrape_dynamic():
    options = Options()
    options.add_argument("--headless")       # 画面なしで実行
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")

    driver = webdriver.Chrome(options=options)
    driver.get("https://example.com/")

    price = driver.find_element(By.CSS_SELECTOR, ".price").text
    print(f"価格: {price}")
    driver.quit()

KAGOYA CLOUD VPS →


VPS上にPython環境を構築する

ここが「非エンジニアには一番ハードル高いかも」と感じるところ。でもコマンドを順番に打つだけなので、意味がわからなくてもとりあえず動きます。自分も最初は呪文を唱えてる気分でした。

# 1. パッケージ更新
sudo apt update && sudo apt upgrade -y

# 2. Python & pip インストール確認
python3 --version  # 3.10以上推奨
pip3 --version

# 3. 仮想環境を作成(プロジェクトごとに分ける)
python3 -m venv ~/scraper-env
source ~/scraper-env/bin/activate

# 4. 必要ライブラリをインストール
pip install requests beautifulsoup4 selenium

# 5. Selenium用ChromeDriverインストール
sudo apt install -y chromium-browser chromium-chromedriver

仮想環境(venv)を作るのが面倒に思えるかもしれませんが、後でcronに登録するときに「どのPythonで動かすか」が明確になるので、むしろやっておいたほうがトラブルが減ります。スキップして後から詰まる人をよく見ます。


cronで定期実行を設定する

ここが本題です。cronはざっくり言うと「Linuxのタスクスケジューラー」。設定ファイルに「いつ・何を実行するか」を書くだけ。

cronの時刻指定の読み方:

分 時 日 月 曜日  コマンド
*  *  *  *  *   毎分実行
0  6  *  *  *   毎朝6時に実行
0  */3 * *  *   3時間おきに実行
0  9  *  *  1   毎週月曜9時に実行

crontabの設定手順

一番ハマりやすいのは「どのPythonを使うか」の指定ミスです。システムのpython3じゃなくて、さっき作った仮想環境のパスを書かないと、ライブラリが読み込めなくてエラーになります。自分も最初これで1時間溶かしました。

# crontabを編集(初回はエディタ選択を求められる。1でnano推奨)
crontab -e

# 以下を追記(仮想環境のPythonパスを使う点が重要)
# 毎朝8時にスクレイパーを実行
0 8 * * * /home/user/scraper-env/bin/python /home/user/scraper.py >> /var/log/scraper.log 2>&1

# 設定確認
crontab -l

ログの確認と管理

「ちゃんと動いてるのかな」が気になって毎日SSH接続するようでは、自動化した意味がない。だからログとエラー通知の設定は最初にやっておくべきです。

# リアルタイムでログを見る
tail -f /var/log/scraper.log

# 最後の20行だけ表示
tail -20 /var/log/scraper.log

# 古いログを自動削除(logrotate設定)
sudo nano /etc/logrotate.d/scraper
/var/log/scraper.log {
    weekly
    rotate 4
    compress
    missingok
    notifempty
}

ログが際限なく溜まるとディスクを圧迫します。logrotateは地味だけど、長期運用するなら絶対に設定しておいてください。

XServer VPS →


エラー時にメールで通知する

エラーが起きたことに3日後に気づく、という経験を一度するとメール通知のありがたさがわかります。最初から設定しておくのが吉です。

import smtplib
from email.mime.text import MIMEText

def send_error_mail(error_message: str):
    msg = MIMEText(f"スクレイパーでエラーが発生しました:\n\n{error_message}")
    msg["Subject"] = "[ERROR] スクレイパー異常停止"
    msg["From"] = "your@gmail.com"
    msg["To"] = "your@gmail.com"

    with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp:
        smtp.login("your@gmail.com", "your-app-password")
        smtp.send_message(msg)

Gmailの「アプリパスワード」を使えば2段階認証環境でも送信できます。通常のパスワードは使わないでください(セキュリティリスクになります)。


A. サイトの利用規約と robots.txt を必ず確認してください。過度なアクセスはサーバー負荷をかけるため、リクエスト間に1〜3秒のスリープを入れるのがマナーです。個人利用・非商業目的での情報収集は多くの場合問題ありませんが、取得データの二次利用には注意が必要です。
A. `grep CRON /var/log/syslog` でcronの実行ログを確認できます。また、スクリプト内で実行時刻をファイルに書き出す処理を入れておくと、「ちゃんと動いているか」を視覚的に確認しやすくなります。
A. VPSは解像度やメモリ制限があるため、`--headless` `--no-sandbox` `--disable-dev-shm-usage` の3オプションを必ず付けてください。またタイムアウト値を `driver.implicitly_wait(10)` などで長めに設定することも有効です。

まとめ:あなたの使い方で選ぶ

セットアップの手順をまとめると以下の5ステップです。

ステップ内容
1VPS(2GB以上)を契約してPython環境を構築
2BeautifulSoup or Seleniumでスクリプトを作成
3/var/log/scraper.log にログを出力する設定を追加
4crontabで実行スケジュールを登録
5エラー通知メールの設定で運用を自動化

そして肝心の「どのVPSを選ぶか」は、使う頻度で決めてください。

使い方おすすめ理由
1日数回・週数時間だけ動かすKAGOYA CLOUD VPS時間課金なので使った分だけ。月76時間未満ならこっちが安い
1日中ほぼ回しっぱなしXServer VPS月830円固定。毎月の金額を計算したくない人はこっちのほうが精神的にラク
まず試してみたいKAGOYA CLOUD VPS(14日無料)週末が2回入るので、平日仕事でも確認する時間は十分ある

初期設定に1〜2時間かかりますが、一度動いたら本当に放置できます。「毎日手動で確認してる時間」を考えたら、その1〜2時間は絶対に取り返せます。

迷っている時間がもったいない。動いてから考えよう。合わなければ乗り換えればいいだけの話です。

KAGOYA CLOUD VPS →

XServer VPS →

あわせて読みたい