ジェラピーのウェブスクレイピング:フルスタックScrapy導入ガイド

Gerapyでウェブスクレイピングをマスターしよう。このガイドでは、セットアップ、エラーの修正、デプロイのヒントなどを扱います。
2 分読
Web Scraping with Gerapy blog image

Gerapyは Scrapyデプロイのためのフルスタックソリューションです。コミット履歴を見ると、それはいくつかの依存性のバンプを受けているが、2022年以来実際には更新されていない。Gerapyを始めるのは、しばしば試行錯誤に満ちた難しいプロセスかもしれません。

このガイドはジェラピーをより簡単にするために存在する。このガイドが終わるころには、あなたは以下の質問に答えられるようになっているでしょう。

  • なぜGerapyは私の標準的なPythonインストールで動作しないのですか?
  • Gerapy用にPythonとpipを設定するには?
  • 管理者アカウントはどのように作成するのですか?
  • 最初のスクレイパーはどう書けばいい?
  • スクレーパーのトラブルシューティング方法は?
  • スクレーパーのテストとデプロイ方法は?

ジェラピーの紹介

ジェラピーの実態とその特徴について理解を深めよう。

ジェラピとは?

GerapyはDjango管理ダッシュボードとScrapyd APIを提供してくれます。これらのサービスにより、スタックを管理するためのシンプルかつ強力なインターフェースが提供されます。現時点ではレガシーなプログラムだが、それでもワークフローを改善し、デプロイをスピードアップしてくれる。Gerapyは、DevOpsや管理志向のチームにとって、ウェブスクレイピングをより身近なものにしてくれる。

  • スクレイパーの作成と監視のためのGUIダッシュボード。
  • ボタンをクリックするだけでスクレーパーを導入。
  • 発生したログやエラーをリアルタイムで可視化。

ジェラピーの特徴

Gerapyは、スクレイパー管理のためのワンストップショップを提供します。Gerapyのレガシーコードと依存関係のために、Gerapyを立ち上げて実行するのは面倒なプロセスです。しかし、一旦動作させれば、スケールの大きなスクレイパーを処理するために調整された完全なツールセットのロックを解除することができる。

  • ブラウザの内側からスクレイパーを構築する。
  • コマンドラインに触れることなく、それらをScrapydにデプロイする。
  • すべてのクローラーとスクレイパーを一元管理。
  • Djangoで作られたスパイダー管理用のフロントエンド。
  • バックエンドにはScrapydを採用し、ビルドとデプロイを容易にしました。
  • タスク自動化のためのスケジューラ内蔵。

Gerapyでウェブをスクレイピングする方法

ジェラピーのセットアップ・プロセスは手間がかかる。技術的負債に対処し、ソフトウェアのメンテナンスを行う必要がある。多くの試行錯誤の後、GerapyはよりモダンなバージョンのPythonと互換性がないことがわかった。私たちはPython 3.13の最新のインストールから始めた。それはGerapyの依存関係には最新すぎた。3.12を試してみたが、やはりだめだった。

結局のところ、Python 3.10が必要だった。その上、非推奨のクラスを修正するためにGerapyの実際のコードの一部を変更する必要があり、さらにGerapyのほとんどすべての依存関係を手動でダウングレードする必要がありました。Pythonはこの3年間で大きな変化を遂げ、Gerapyの開発はそれに追いついていない。私たちは3年前のGerapyの理想的な状態を再現する必要があります。

プロジェクト設定

パイソン3.10

手始めに、Python 3.10をインストールする必要がある。このバージョンは絶滅したわけではないが、もはや広く利用できるものではない。ネイティブのUbuntuとUbuntu搭載のWindows WSLでは、aptでインストールできる。

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.10 python3.10-venv python3.10-dev

その後、--versionフラグでインストールされていることを確認できる。

python3.10 --version

すべてがうまくいけば、以下のような出力が表示されるはずだ。

Python 3.10.17

プロジェクトフォルダの作成

まず、新しいフォルダを作る。

 mkdir gerapy-environment

次に、新しいプロジェクト・フォルダーにcdして、仮想環境をセットアップする必要がある。

cd gerapy-environment
python3.10 -m venv venv

環境を活性化させる。

source venv/bin/activate

環境がアクティブになったら、Pythonのアクティブなバージョンを確認できます。

python --version

ご覧のように、pythonのデフォルトは3.10になりました。

Python 3.10.17

依存関係のインストール

以下のコマンドは、Gerapyとその必要な依存バージョンをインストールする。ご覧のように、pip==を使用して、多くのレガシー・パッケージを手動でターゲットにする必要があります。

pip install setuptools==80.8.0
pip install scrapy==2.7.1 gerapy==0.9.13 scrapy-splash==0.8.0 scrapy-redis==0.7.3 scrapyd==1.2.0 scrapyd-client==1.2.0 pyopenssl==23.2.0 cryptography==41.0.7 twisted==21.2.0

それでは、initコマンドで実際のGerapyプロジェクトを作成してみよう。

gerapy init

次に、gerapyフォルダに入りmigrateを実行してデータベースを作成する。

cd gerapy
gerapy migrate

さて、いよいよ管理者アカウントを作成します。このコマンドはデフォルトで管理者権限を与える。

gerapy initadmin

最後に、Gerapyサーバーを起動する。

gerapy runserver

このような出力が表示されるはずだ。

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
INFO - 2025-05-24 13:49:16,241 - process: 1726 - scheduler.py - gerapy.server.core.scheduler - 105 - scheduler - successfully synced task with jobs with force
May 24, 2025 - 13:49:16
Django version 2.2.28, using settings 'gerapy.server.server.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

ダッシュボードの使用

http://127.0.0.1:8000/、ログインを求められます。デフォルトのアカウント名はadminで、パスワードもadminです。ログイン後、ジェラピーのダッシュボードに移動します。

ジェラピーのダッシュボード

プロジェクト」タブをクリックし、新しいプロジェクトを作成します。これをquotesと呼ぶことにする。

新しいジェラピープロジェクトの作成

ターゲット・サイトの取得

では、新しいスパイダーを作りましょう。新しいプロジェクトで、”add spider “ボタンをクリックする。Start Urls “セクションで、https://quotes.toscrape.com。“ドメイン “の下に、quotes.toscrape.comと入力する。

URLとドメインの追加

抽出ロジック

次に、抽出ロジックを追加します。以下のparse()関数は、CSSセレクタを使ってページから引用符を抽出します。セレクタについて詳しくはこちらをご覧ください。

Inner Code “セクションまでスクロールダウンし、解析関数を追加する。

def parse(self, response):
    quotes = response.css('div.quote')
    print(f"Found {len(quotes)} quotes")
    for quote in quotes:
        text = quote.css('span.text::text').get()
        author = quote.css('small.author::text').get()
        print(f"Text: {text}, Author: {author}")
        yield {
            'text': text,
            'author': author,
        }

画面の右下にある「保存」ボタンをクリックします。今スパイダーを実行すると、重大なエラーが発生します。GerapyはScrapyのBaseItemを使おうとしています。しかし、BaseItemは数年前にScrapyから削除されました。

BaseItemエラー

BaseItemエラーの修正

このエラーを解決するには、Scrapyの内部コードを編集する必要があります。これはコマンドラインから行うことができます。しかし、検索機能のあるGUIテキストエディタからの方がはるかに簡単です。

仮想環境のソースファイルにcdを入れる。

cd venv/lib/python3.10/site-packages/gerapy/server/core

VSCodeでこのフォルダを開くには、以下のコマンドを使います。

code .

parser.pyを開いてみてください。

ScrapyがBaseItemをインポートしようとする

この行を以下のように置き換える必要がある。

from scrapy import Item
BaseItemをItemに置き換える 
インポート

BaseItemインポートを削除したので、Itemを持つBaseItemのインスタンスをすべて削除する必要がある。唯一のインスタンスはrun_callback()関数の中にあります。変更を保存し終わったら、エディタを閉じます。

ファイル中のBaseItemをItemに置き換える

スパイダーを実行すると、新しいエラーが表示されます。

REQUEST_FINGERPRINTER_IMPLEMENTATION 非推奨エラー

REQUEST_FINGERPRINTER_IMPLEMENTATIONの非推奨の修正

見た目にはわからないが、Gerapyは実際に我々の設定を直接スパイダーに注入する。

cd
cd gerapy-environment/gerapy/projects/quotes

もう一度、テキストエディタを開く。

code .

スパイダーを開いてください。タイトルはquotes.pyで、spidersフォルダの中にあります。スパイダークラスの中にparse()関数があるはずです。ファイルの一番下にcustom_settings という配列があるはずです。設定は文字通り Gerapy によってスパイダーに注入されます。

カスタムスパイダー設定

新しい設定を1つ追加する必要がある。2.7を使う必要があります。2.6ではエラーが出続けます。何度も試行錯誤を繰り返した結果、このことを発見しました。

"REQUEST_FINGERPRINTER_IMPLEMENTATION": "2.7",

さて、ジェラピーの再生ボタンを使ってスパイダーを実行すると、すべてのエラーが解決される。以下のように、エラーメッセージの代わりに、”Follow Request “が表示されます。

スパイダーがエラーなしで動作するようになりました。

すべてをまとめる

スクレーパーを作る

Gerapyの “Projects “タブに戻ると、プロジェクトの “Built “欄に “X “が表示されている。これは、私たちのスクレイパーがデプロイ用の実行ファイルにビルドされていないことを意味します。

私たちのスクレーパープロジェクトはまだ建設されていない

デプロイ」ボタンをクリックする。次に「ビルド」をクリックします。

パッケージのビルドに成功

スケジューラの使用

スクレイパーを特定の時間または間隔で実行するようにスケジュールするには、「タスク」をクリックし、新しいタスクを作成します。次に、スケジュールの設定を選択します。

スケジュールの設定

完了したら、「作成」ボタンをクリックする。

Gerapyによるスクレイピングの制限

依存関係

そのレガシーコードには、この記事で正面から取り組んだ多くの制限がある。Gerapyを動作させるだけで、内部のソースコードを編集する必要があった。もしあなたがシステムの内部を触ることに抵抗があるなら、Gerapyはあなた向きではない。BaseItemエラーを覚えているだろうか?

Gerapyの依存関係は進化し続けるが、Gerapyは凍結されたままである。Gerapyを使い続けるには、個人的にインストールを維持する必要があります。これは、メンテナンスと試行錯誤の非常に現実的なプロセスという形で、技術的負債を追加することになる。

以下の断片を思い出してほしい。これらのバージョン番号は、試行錯誤の綿密なプロセスを経て発見されたものだ。依存関係が壊れた場合、動作するものが見つかるまで、継続的に異なるバージョン番号を試す必要があります。このチュートリアルだけでも、10個の依存関係の動作するバージョンを見つけるために試行錯誤をしなければなりませんでした。時間が経てば経つほど、これは悪化していくだろう。

pip install setuptools==80.8.0
pip install scrapy==2.7.1 gerapy==0.9.13 scrapy-splash==0.8.0 scrapy-redis==0.7.3 scrapyd==1.2.0 scrapyd-client==1.2.0 pyopenssl==23.2.0 cryptography==41.0.7 twisted==21.2.0

オペレーティング・システムの制限

このチュートリアルを試みた当初は、ネイティブのWindowsを使ってみた。こうして、Pythonのバージョンによる最初の制限を発見した。現在のPythonの安定リリースは3.9、3.11、3.13に限られている。複数のバージョンのPythonを管理するのは、OSに関係なく難しい。しかし、UbuntuはdeadsnakesPPAリポジトリを提供してくれる。

deadsnakesがなければ、互換性のあるバージョンのPythonを見つけることは可能ですが、その場合でもPATHの問題を処理し、python(デフォルトのインストール)とpython3.10を区別する必要があります。WindowsやmacOSからこれをネイティブに扱うことは可能でしょうが、別の回避策を見つける必要があります。Ubuntuや他のaptベースのLinuxディストロでは、少なくともPATHに直接インストールされた古いバージョンのPythonに素早くアクセスできる再現可能な環境が得られます。

Gerapyとのプロキシ統合

バニラScrapy自体のように、プロキシの統合は簡単にできます。Gerapyの設定インジェクションの真の精神で、プロキシを直接スパイダーに注入することができます。以下の例では、Web Unlockerを使用して接続するためにHTTPPROXY_ENABLEDと HTTPPROXY_PROXYの設定を追加しています。

"HTTPPROXY_ENABLED": True,
"HTTPPROXY_PROXY": "http://brd-customer-<your-username>-zone-<your-zone-name>:<your-password>@brd.superproxy.io:33335"

プロキシ統合後の完全なスパイダーです。ユーザー名、ゾーン、パスワードを自分のものと入れ替えるのを忘れずに。

プロキシ統合スパイダー

ジェラピーの有効な代替品

  • Scrapyd:これはGerapyや他のあらゆるScrapyスタックの実際のバックボーンである。Scrapydを使えば、古いHTTPリクエストですべてを管理し、ダッシュボードを構築することができる。
  • スクレイピング機能:当社のスクレイピング機能では、スクレイパーをクラウドに直接デプロイし、オンラインIDEから編集することができます。

結論

ジェラピーは、急速に変化する世界ではレガシーな製品だ。実際にメンテナンスが必要で、自分の手を汚す必要がある。Gerapyのようなツールを使えば、スクレイピング環境を一元化し、単一のダッシュボードからすべてを監視することができる。DevOpsの世界では、Gerapyは真の実用性と価値を提供する。

Scrapyがお好みでない場合は、データ収集のニーズを満たす多くの実行可能な代替品を提供しています。下記の製品はほんの一部です。

  • カスタムスクレーパー:コード不要でスクレーパーを作成し、当社のクラウドインフラストラクチャにデプロイします。
  • データセット毎日更新されるウェブ上の歴史的データセットにアクセス。インターネット史のライブラリを指先ひとつで。
  • レジデンシャル・プロキシあなたが自分でコードを書くことを好むか、AIを使用してスクレイピングを好むかにかかわらず、私たちのプロキシは、実際の住宅インターネット接続でジオターゲティングを使用してインターネットにアクセスすることができます。

今すぐ無料トライアルに登録し、データ収集を次のレベルに引き上げましょう!

クレジットカードは必要ありません