mcpField
H
hasdata

hasdata

github.com/hasdataデータ・データベース1440 回インストール24 週間前に更新
リポジトリ

hasdata について

HasDataは、クラウドサービスのAPIで公開ウェブデータを抽出するためのスキルガイドです。同期スクレイパー、任意URLの取得、非同期ジョブの使い分けや結果取得を説明します。

主な機能

  1. 01任意URLのウェブスクレイピング
  2. 02プラットフォームAPIの構造化データ
  3. 03非同期の一括スクレイパージョブ
  4. 04認証、再試行、ポーリングのガイド
  5. 05PythonとTypeScriptのコード例

活用シーン

  1. 01ウェブページの描画済みコンテンツを取得
  2. 02検索やマーケットプレイスの構造化データ取得
  3. 03ドキュメントをMarkdown形式で収集
  4. 04ポーリングで一括抽出を実行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/hasdata/agent-skills --skill hasdata

インストール後、Claude Code で/hasdataを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
code-recipes.md
ecommerce.md
jobs.md
local-business.md
real-estate.md
scraper-jobs.md
search.md
travel.md
web-scraping.md
youtube.md

詳細

HasData

公開ウェブデータを抽出するクラウドプラットフォームです。API キーは 1 つ、実行モードは 3 つです。すべてのエンドポイントは https://api.hasdata.com 配下にあり、x-api-key で認証します。

curl -G 'https://api.hasdata.com/scrape/google/serp' \
  --data-urlencode 'q=coffee' \
  -H 'x-api-key: <your-api-key>'

401 は無効なキー、403 はクォータ超過、429 は同時実行数の上限、500 はサーバーエラー(再試行してください)を示します。

3 つの実行モード

モードレイテンシ用途エンドポイント
Web Scraping API数秒任意の URL — JS レンダリング、CSS/AI 抽出、スクリーンショットPOST /scrape/web
Scraper APIs(同期)数秒対応プラットフォーム(Google、Amazon、Zillow、…)の解析済み JSONGET /scrape/<vertical>/<resource>
Scraper Jobs(非同期)数分〜数時間一括抽出、再帰的クロール、Webhook による分配POST /scrapers/<slug>/jobs

判断基準。 プラットフォームに Scraper API がある場合は、これをデフォルトで使用してください(解析済み JSON を取得でき、セレクターの保守が不要です)。API でカバーされていない任意の URL には Web Scraping を使用してください。Scraper Job を選ぶのは、API と同等のものがない場合(crawler、contacts、sec-edgar、amazon-bestsellers、amazon-product-reviews)に限ります。または、非同期分配と Webhook により、ページネーションを行うクライアントのループよりも開発時間を短縮できる場合に使用してください。

常に共通するレスポンス形式

{ "requestMetadata": { "id": "…", "status": "ok", "url": "…" }, "...": "endpoint-specific" }

requestMetadata.status === "ok" の場合に限り、データを有効として扱ってください。HTTP 200 だけでは不十分です。

効果の高いパターン

  • SERP を起点とした情報補完。 Google SERP は自由形式のデータレイクです。q="<Person> <Company> linkedin" とすると、organicResults[0].title と .snippet に役職と所在地がすでに含まれるため、プロフィールページをスクレイピングする必要はありません。同じ方法を crunchbase、wikipedia、github にも使えます。また、逆引きには引用符で囲んだ文字列("[email protected]"、"+1 555 …")を使えます。
  • AI Mode + 検証。 /scrape/google/ai-mode で回答と参照先を取得し、各参照 URL に対して /scrape/web(Markdown)を実行します。ベクターデータベースを使わずに、引用付きの RAG コンテキストを作成できます。
  • Maps → リード。 /scrape/google-maps/search はウェブサイトと電話番号を返します。extractEmails: true を指定して /scrape/web に分配すると、リード情報をすべて含む行を取得できます。
  • Crawler → コーパス。 outputFormat: ["markdown"] と includePaths: "/docs/.+" を指定した crawler Scraper Job を使うと、1 回の送信で LLM 用のコーパスを作成できます。
  • SERP のリッチスニペットから事前抽出。 knowledgeGraph、localResults、inlineShoppingResults、relatedQuestions には、ボット対策を回避できる解析済み情報が含まれます。スクレイピングの前に必ず確認してください。

コードから呼び出す場合(接続方法)

  • 認証: すべてのリクエストに x-api-key ヘッダーを指定します。環境変数 HASDATA_API_KEY から読み取ってください。ハードコードせず、ログにも記録しないでください。
  • タイムアウト: クライアントのタイムアウトは 300 秒以上に設定してください。 HasData 側の制限時間は 300 秒です。これより短いタイムアウトを設定すると、完了時に課金される一方で、見かけ上の失敗が発生します。
  • 再試行: 429 と 5xx のみを対象とし、指数バックオフとジッターを使用します。4xx(認証、検証)は再試行しないでください。
  • 同時実行数: プランの上限に合わせてください。無料プランは 1 です。それを超えると 429 が発生するだけです。
  • 非同期ジョブ: 送信レスポンスのハンドルは body.id(整数)であり、jobId ではありません。 すぐに保存してください。GET /scrapers/jobs/<id> を 10〜30 秒間隔でバックオフしながらポーリングします。Webhook はベストエフォートとして扱い、必ずポーリングと併用してください。finished になると、ステータスに有効期間の短い URL(data: {csv, json, xlsx})が含まれます。すぐにダウンロードしてください。

すぐに貼り付けて使える Python と TypeScript のクライアント(再試行、バックオフ、同時実行数の制限、ジョブの全ライフサイクルに対応)については、references/code-recipes.md を参照してください。

よくある注意点

  • サーバーのタイムアウトは300 sです。 クライアントのタイムアウトも合わせてください。
  • まずは jsRenderingを無効にし、ページで必要な場合にのみ有効にしてください。ほとんどの静的ページはヘッドレスブラウザーを使わなくても問題なく解析できます。
  • cookiesパラメーターはありません。Cookieはheaders["Cookie"]を通じて渡してください。
  • includePathsの正規表現では大文字と小文字が区別されます。 /blog/.+は/Blog/...には一致しません。
  • Scraper Jobのdataは二重にラップされています。 各行はbody.data[i].dataです。外側にはid、jobId、dataId、createdAt、updatedAtが含まれます。
  • 成功を示すのはrequestMetadata.status === "ok"のみです。 HTTP 200だけでは十分ではありません。
  • Webhookは3回再試行するベストエフォート方式です。 必ずポーリングによる代替手段を用意してください。

リファレンス

リソース

コメント