今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

gocolly/colly

Goで書く高速なウェブスクレイピングとクローリングフレームワーク

colly を使えば、クッキー管理や robots.txt 対応をコードで書かずに済み、価格モニタリングやニュース収集のクローラーをその日のうちに動かせます。同期・非同期・並列という3つのモードを切り替えるだけで、秒間1,000件以上のリクエストを処理する挙動を自分の目で確認できます。Go の軽量な実行ファイルなので、Scrapy のような重い環境構築は不要で、go.mod ひとつで依存関係が整い、すぐにビルドして配布まで試せます。

01 / 概要
何をするものか一文で言うと
ひとことでGoで書く高速なウェブスクレイピングとクローリングフレームワーク

Colly は Go言語向けのスクレイピング・クローリングフレームワークです。Collectorオブジェクトにコールバックを登録するだけで、HTTPリクエスト送信からHTML・XML解析、リンク追跡までを一貫して扱えます。単体プロセスでも並列・非同期・キュー方式でも動かせる設計になっています。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

中核は colly.go の Collector構造体です。NewCollectorでインスタンスを作り、AllowedDomains・CacheDir などのオプション関数で挙動を設定します。Visit(url)を呼ぶと http_backend.go 経由でnet/httpによるリクエストが送られ、response.goでレスポンスを受け取ります。HTMLはgoquery(PuerkitoBio/goquery)でhtmlelement.goがラップし、XMLはantchfx/xmlqueryをxmlelement.goが扱います。OnRequest・OnResponse・OnHTML・OnXML・OnError・OnScrapedという順にコールバックが発火し、e.Request.Visit(link)で新しいリンクをキューに追加していきます。queue/queue.goはワーカー数を指定した並列処理を、storage/storage.goはCookieやキャッシュの永続化を担当します。robots.txtはtemoto/robotstxtで解釈され、AllowedDomainsと合わせてクロール範囲を制御します。extensions/以下ではUser-Agentのランダム化やReferer付与などの補助機能が用意されています。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    go get github.com/gocolly/colly/v2 でモジュールを取得し、_examples/basic/basic.go相当のコードを go run で実行します。

  2. STEP 02

    実行すると Visiting https:... というログが標準出力に流れ、AllowedDomainsで指定したドメイン内のリンクだけが順に辿られるのを確認できます。

  3. STEP 03

    _examples/cryptocoinmarketcap のように OnHTML内でCSVライターへ書き込む例を動かすと、実行後にcryptocoinmarketcap.csvが生成され中身に価格データが入っています。

  4. STEP 04

    _examples/coursera_courses を試すと CacheDir指定によりcoursera_cacheフォルダが作られ、再実行時はキャッシュから読み込まれて通信が減るのが体感できます。

  5. STEP 05

    cmd/colly の colly new コマンドを使うと、--callbacks=html,response,errorのようなオプション付きで雛形のGoファイルが自動生成されます。

  6. STEP 06

    実サイトを対象にすると robots.txt やレート制限に引っかかり、OnErrorコールバックでステータスコード付きのエラーが記録される場面に出会います。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

手元では、指定URLから始まりリンクを辿りながら抽出したデータがCSVやJSONファイル、または標準出力のログとして得られます。cmd/colly new を使えばボイラープレートのGoファイルがすぐ手に入ります。キャッシュを使えば再実行時の通信量を抑えられ、queueパッケージを使えば並列数を制御したクロール結果が得られます。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

_examples内の対象サイト(coursera.org、coinmarketcap.comなど)はHTML構造が変わりやすく、そのままではセレクタが古くなって動かない可能性があります。

02

robots.txtやAllowedDomainsの設定を誤ると、意図しない範囲まで無制限にクロールしてしまう恐れがあります。

03

go.modはgo1.24.0とtoolchain go1.24.9を要求しており、古いGo環境では素直にビルドできない場合があります。

04

並列・非同期設定(Async、queueのワーカー数)を高くしすぎると対象サイトからレート制限やアクセス拒否を受けるリスクがあります。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

Go言語でクローラーやスクレイパーを自作したい開発者、特にコールバックベースの明快なAPIとキャッシュ・並列処理・robots.txt対応を標準機能として求める人に向いています。README・go.mod・cmd/colly・_examples群のソースコードが一致して同じ設計思想(Collector中心のコールバック駆動)を示しているため、実際に動かさなくても挙動の骨格は十分に信頼して判断できます。ただし対象サイトのHTML変化やレート制限への対応は利用者側の運用次第です。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する