anakin — サイトを本文だけのMarkdownに変える自己ホストAPI(英語)動いた
任意のURLをPOSTすると、ナビゲーションやスクリプトを除いた本文だけのMarkdown(またはHTML)にして返す、自己ホスト型のスクレイピングAPI。提供元のホスト版は anakin.io で、似た名前だが無関係な生成AIアプリ紹介サービス anakin.ai とは別物。
この日に実際に動かした結果です。内容の誤りに気づかれた場合はお問い合わせください。確認のうえ訂正します。
anakin を使う前に分かること
| 必要なもの | 追加で用意するものは無し(無料の範囲で動いた) |
|---|---|
| 動かした環境 | Go 1.24.7 のマシンに直接(Docker daemon はこの環境で動くが、Docker Hub からのイメージ取得が通信制限で失敗したため、README の「Docker… |
| 日本語 | 画面・文書は英語 |
| 確認日 | 2026-09-11(この日に実際に動かした) |
anakin の使い方
やること:自分のマシンでAnakinScraperのAPIサーバーを起動し、任意のWebページを本文だけのMarkdownに変換して取り出す。
リポジトリをcloneし、server/ ディレクトリでデータベース無しのメモリモードのままサーバーを起動する。go.mod は Go 1.25 を要求するが、go コマンドが自動でそのバージョンを取得してビルドしてくれる。
git clone https://github.com/Anakin-Inc/anakin.git anakinscraper-oss TELEMETRY=off go run cmd/server/main.gogo: downloading go1.25.0 のあとビルドが進み、http://localhost:8080 で待受を始める。ログに gemini API key not configured / telemetry disabled / API_KEY is not set の3行が出る。
URLを1つ渡してMarkdown変換を試す。
curl -s -X POST http://localhost:8080/v1/scrape -H 'Content-Type: application/json' -d '{"url": "https://github.com/Anakin-Inc/anakin"}' | jq '.status, .durationMs, .markdown'status が completed になり、GitHubのリポジトリページからナビゲーションやボタンのラベルを除いた本文相当のMarkdownが1秒未満で返る。
複数URLをまとめて投げ、ジョブIDで結果を後から取りに行く。
curl -s -X POST http://localhost:8080/v1/url-scraper/batch -H 'Content-Type: application/json' -d '{"urls": ["https://github.com/Anakin-Inc/anakin", "https://pypi.org/project/requests/"]}' | jq . curl -s http://localhost:8080/v1/url-scraper/batch/da1bf82d-ef55-403f-a68f-0165dab64aec | jq '.status, .results[].status'最初の呼び出しは status: pending のジョブIDだけを返す。数秒後にIDを叩くと status: completed とURLごとの結果(completed/failed)が並ぶ。
README の比較表で一番の売りにされている「アンチ検知ブラウザ(Camoufox)」を useBrowser:true で使ってみる。
curl -s -X POST http://localhost:8080/v1/scrape -H 'Content-Type: application/json' -d '{"url": "https://github.com/Anakin-Inc/anakin", "useBrowser": true, "timeout": 60}'all handlers failed: no available handlers for request で失敗する。サーバーのログには handler unhealthy, skipping が2回出る。ブラウザ機能は docker-compose の browser-service コンテナ(別ポート9222でCamoufoxを動かす)が別途起動していないと使えない。
もう一つの目玉であるドメインごとの失敗検知(domain-configs)を確認する。
curl -s http://localhost:8080/v1/domain-configsno_database、Domain configs require DATABASE_URL to be set が返り、HTTPステータスは503。この機能はPostgreSQLを立てるフルの docker-compose 構成でないと使えない。
最後まで通した時に出たもの(実際の出力)
"### Uh oh!\n\nThere was an error while loading. [Please reload this page]().\n\n[Anakin-Inc](https://github.com/Anakin-Inc) / [**anakin**](https://github.com/Anakin-Inc/anakin) Public
anakin の良かった点
- git clone して go run するだけで、Dockerもデータベースも無しにAPIサーバーが立つ。APIキーも登録も不要で、この状態のまますぐ試せる
- 取得したHTMLから本文だけを抜き出す精度が高い。GitHubのリポジトリページのような複雑なDOMでも、ナビゲーションやボタンの文言を含まない本文相当のMarkdownになって返ってきた
- 同期(即返す)・非同期(ジョブID)・バッチ(複数URL)の3系統のAPIが揃っていて、用途に応じて使い分けられる
anakin の不便だった点
- README の比較表で名指しされている2つの差別化ポイント(アンチ検知ブラウザ/失敗検知のdomain-configs)は、README のQuick Startどおり(go runのみ)では両方とも動かない。ブラウザは別コンテナ、失敗検知はPostgreSQLが要るとエラーメッセージで初めて分かる作りで、Quick Startの案内にはその制約が書かれていない
- generateJson: true をGEMINI_API_KEY無しで送ってもエラーにならず、status: completed のまま generatedJson だけが null で返ってくる。機能が有効になっていないことに気づきにくい
- 稼働統計を1時間ごとに anakin.io へ送るテレメトリがデフォルトで有効。止めるにはREADME本体ではなくTELEMETRY.mdに書かれた環境変数 TELEMETRY=off が要る
詰まった点と、効いた対処
curl -s -X POST http://localhost:8080/v1/scrape -H 'Content-Type: application/json' -d '{"url": "https://github.com/Anakin-Inc/anakin", "useBrowser": true, "timeout": 60}'all handlers failed: no available handlers for request | Tip: try anakin.io for managed scraping with zero infrastructuredocker-compose.yml の browser-service(Camoufoxを動かす別コンテナ、ポート9222)を別途起動し、サーバー起動時に BROWSER_WS_URL を渡す必要がある。go run だけの最小構成では直らない
curl -s http://localhost:8080/v1/domain-configs{"error":"no_database","message":"Domain configs require DATABASE_URL to be set"}PostgreSQLを立てて DATABASE_URL を設定する(docker-compose のフル構成、または自前のPostgres)
anakin の有料プランで何ができるようになるか
OSS本体(HTTP取得・Markdown変換・同期/非同期/バッチAPI)はここで検証した範囲すべて無料。有料になり得るのは、素通りできなかった一部のページ用に自分で契約する第三者スクレイピングAPIの鍵と、generateJson で使う自分のGEMINI_API_KEYの2箇所だけで、どちらも設定しなければ課金は発生しない。
確認した条件
| 確認日 | 2026-09-11 |
|---|---|
| 試した版 | a842fc2f1fe5c22b80cd81e3f0760335ee21ed29 |
| 実行環境 | Go 1.24.7 のマシンに直接(Docker daemon はこの環境で動くが、Docker Hub からのイメージ取得が通信制限で失敗したため、README の「Docker無し」クイックスタートで検証した) |