hasdata について
HasDataは、クラウドサービスのAPIで公開ウェブデータを抽出するためのスキルガイドです。同期スクレイパー、任意URLの取得、非同期ジョブの使い分けや結果取得を説明します。
主な機能
- 01任意URLのウェブスクレイピング
- 02プラットフォームAPIの構造化データ
- 03非同期の一括スクレイパージョブ
- 04認証、再試行、ポーリングのガイド
- 05PythonとTypeScriptのコード例
活用シーン
- 01ウェブページの描画済みコンテンツを取得
- 02検索やマーケットプレイスの構造化データ取得
- 03ドキュメントをMarkdown形式で収集
- 04ポーリングで一括抽出を実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hasdata/ agent-skills --skill hasdataインストール後、Claude Code で/hasdataを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/code-recipes.mdecommerce.mdjobs.mdlocal-business.mdreal-estate.mdscraper-jobs.mdsearch.mdtravel.mdweb-scraping.mdyoutube.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、…)の解析済み JSON | GET /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/.+"を指定したcrawlerScraper 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回再試行するベストエフォート方式です。 必ずポーリングによる代替手段を用意してください。
リファレンス
references/web-scraping.md—POST /scrape/webのパラメーター、JSシナリオ、AI抽出、Cookie認証。references/search.md— Google SERP/Light/AI Mode/News/Shopping/Bing/Trendsとページネーション。references/ecommerce.md— Amazon(商品、検索、販売者、販売者の商品)とShopify。references/real-estate.md— Zillow、Redfin(角括弧で囲まれたフィルター)。references/travel.md— Airbnb、Booking、Google Flights(乗客数のルール、トークンによるページネーション、IATAコード)。references/local-business.md— Maps(検索/場所/レビュー/写真/投稿)、Yelp、YellowPages。references/jobs.md— IndeedとGlassdoor。references/youtube.md— YouTubeの検索/動画/チャンネル/文字起こし。references/scraper-jobs.md— 非同期の送信/ポーリング/結果、Crawler、Contacts、SEC EDGAR、Webhookレシーバー。references/code-recipes.md— 再試行、バックオフ、並行処理、ポーリングに対応したPython/TypeScriptクライアント。
リソース
- サイトマップ:https://docs.hasdata.com/llms.txt
- APIステータスコード:https://docs.hasdata.com/api-codes
- クレジットと並行処理:https://docs.hasdata.com/credits-and-concurrency
- ダッシュボード:https://app.hasdata.com