HasData Web Scraping について
HasData Web Scrapingは、公開ページの取得が必要なMCPクライアント向けのホスト型サービスです。JavaScriptのレンダリングやプロキシに対応し、複数のテキスト形式と構造化形式で出力します。
主な機能
- 01公開ウェブページの取得
- 02必要に応じたJavaScriptレンダリング
- 03データセンター・住宅プロキシの利用
- 04Markdown・テキスト・HTML・JSONで出力
- 05CSSルールによる項目やリンクの抽出
活用シーン
- 01ドキュメントからコードブロックを収集
- 02JavaScriptで動的に読み込まれる内容を取得
- 03指定項目に沿ってページデータを整形
MCP 対応
ホスト型リモートサーバーとして、ウェブページ取得ツールをMCPクライアントに公開します。ページ取得用プロンプトと、プロキシ選択肢のリソースも提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.hasdata.com/mcp?apis=web_scrapingclaude mcp add --transport http com-hasdata-web-scraping https://mcp.hasdata.com/mcp?apis=web_scraping{"mcpServers":{"com-hasdata-web-scraping":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=web_scraping"}}}Cursor で開く{"servers":{"com-hasdata-web-scraping":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=web_scraping"}}}VS Code で開く{"mcpServers":{"com-hasdata-web-scraping":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=web_scraping"}}}{"mcpServers":{"com-hasdata-web-scraping":{"serverUrl":"https://mcp.hasdata.com/mcp?apis=web_scraping"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://mcp.hasdata.com/mcp?apis=web_scraping認証が必要ツール
2| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| pets | number | いいえ | ペットの数。 |
| neLat | number | いいえ | 地図のバウンディングボックスの北東角の緯度。4 つの境界ボックス座標をすべて指定すると、場所ではなくボックス内でリスティングを検索します。 |
| neLng | number | いいえ | 地図のバウンディングボックスの北東角の経度。 |
| swLat | number | いいえ | 地図のバウンディングボックスの南西角の緯度。 |
| swLng | number | いいえ | 地図のバウンディングボックスの南西角の経度。 |
| adults | number | いいえ | 大人の人数。 |
| checkIn | string | はい | リスティングのチェックイン日。 |
| infants | number | いいえ | 乳幼児の人数。 |
| checkOut | string | いいえ | リスティングのチェックアウト日。 |
| children | number | いいえ | 子どもの人数。 |
| location | string | いいえ | リスティングを検索する場所。完全な地図バウンディングボックス(neLat、neLng、swLat、swLng)を指定しない場合は必須です。 |
| nextPageToken | string | いいえ | 次のページの結果を取得するためのトークン。 |
詳細
Web Scraping MCP Server
Claude、Cursor、Windsurf、その他あらゆる MCP クライアントに、公開されている任意の Web ページを取得する読み取り専用ツールを提供する、ホスト型の Model Context Protocol(MCP)サーバーです。管理されたプロキシ経由でアクセスし、ページに必要な場合は JavaScript をレンダリングして、クリーンな Markdown、プレーンテキスト、生の HTML、または構造化 JSON を返します。ホストするものも、スタックにブラウザーを組み込む必要もありません。
専用 API がないサイト向けの代替手段です。HasData catalogue に API があるサイトでは、そのツールが解析済みのフィールドを返し、こちらのツールはページを返します。
毎月 1,000 クレジットが無料で、カード登録も不要です。 通常の取得は 1 クレジットなので、無料枠で 1,000 回利用できます。
https://mcp.hasdata.com/mcp?apis=web_scraping
目次
必要なもの
MCP クライアントと、ダッシュボードから取得できる HasData API キーが必要です。カード登録不要で無料で作成できます。これはリモートサーバーなので、最も簡単な方法は URL と x-api-key ヘッダーを使うことです。コンテナーを起動する必要はありません。stdio のみを話すクライアントからは、薄いランチャーを介して接続できます。ランチャーは npm では @hasdata/web-scraping-mcp、PyPI では hasdata-web-scraping-mcp として公開されています。以下で紹介します。
クイックスタート
サーバー URL はすべてのクライアントで共通です。Claude Code と Claude Desktop で実際に動作させています。その他のブロックは、それぞれのクライアントでリモートサーバー用にドキュメント化されている形式に従っています。
| 項目 | 値 |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=web_scraping |
| トランスポート | HTTP、ストリーミング可能 |
| 認証ヘッダー | x-api-key: HASDATA_API_KEY |
OAuth に対応したクライアントでは、同じ URL をコネクターとして追加してサインインすれば、設定ファイルにキーを記述せずに利用できます。
Claude Code
claude mcp add --transport http web-scraping "https://mcp.hasdata.com/mcp?apis=web_scraping" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
「設定」から「コネクター」、「カスタムコネクターを追加」の順に進み、https://mcp.hasdata.com/mcp?apis=web_scraping を貼り付けてサインインします。
設定ファイルを使う場合、Claude Desktop はローカル(stdio)サーバーのみを読み込むため、stdio ランチャーを介してリモートサーバーに接続します。@hasdata/web-scraping-mcp パッケージがそのランチャーで、キーは環境変数から読み込みます。これを claude_desktop_config.json に追加します。
{
"mcpServers": {
"web-scraping": {
"command": "npx",
"args": ["-y", "@hasdata/web-scraping-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Node の代わりに Python を使う場合は、ランチャーを PyPI パッケージに置き換えます。これは uvx で実行でき、手動でインストールする必要はありません。
{
"mcpServers": {
"web-scraping": {
"command": "uvx",
"args": ["hasdata-web-scraping-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
すべてのプロジェクトで使う場合は ~/.cursor/mcp.json、1 つのプロジェクトで使う場合は .cursor/mcp.json を使用します。
{
"mcpServers": {
"web-scraping": {
"url": "https://mcp.hasdata.com/mcp?apis=web_scraping",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json を使用します。Windsurf ではフィールド名に url ではなく serverUrl を使います。
{
"mcpServers": {
"web-scraping": {
"serverUrl": "https://mcp.hasdata.com/mcp?apis=web_scraping",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
VS Code
ワークスペース内の .vscode/mcp.json を使用します。
{
"servers": {
"web-scraping": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=web_scraping",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
プロンプトの例
- このページをマークダウンとして取得して要約してください。
- このドキュメントページを読み、すべてのコードブロックを抜き出してください。
- このサイトのトップページからタイトルとリンクを取得し、JSON 形式で出力してください。
- このページは JavaScript でコンテンツを読み込むため、レンダリングして結果のリストが表示されるまで待ってから読み取ってください。
- ドイツの住宅用プロキシを経由してこのページを取得し、価格が異なるかどうか教えてください。
- このページのスクリーンショットを撮ってください。
これらには、それぞれ 1 回の呼び出しで回答できます。異なるのは、ブラウザーの機能をどれだけ使うかであり、それによって呼び出しのコストが決まります。
ツール
| ツール | 返される内容 |
|---|---|
hasdata_web_scraping_web_scraping_scrapeWebPage | ステータスコード、抽出されたメールアドレスとリンク、CSS セレクターによる抽出結果、スキーマに基づく AI 構造化フィールドとともに、HTML、テキスト、マークダウン、JSON のいずれか、または複数を返します。通常の取得では 1 回の呼び出しにつき 1 クレジット、JS レンダリングを有効にすると 10 クレジットです。 |
ツールは 1 つです。コストは有効にする機能によって異なります。料金表は料金・無料利用枠・制限にあります。
Web ページをスクレイピングする
hasdata_web_scraping_web_scraping_scrapeWebPage
URL を 1 つ取得します。
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
url | string | はい | 取得するページ |
outputFormat | array | markdown、text、html、json のいずれかです。出力形式を参照してください | |
jsRendering | boolean | ブラウザーでページをレンダリングします。デフォルトで有効になっており、主なコスト調整要因です | |
proxyType | string | datacenter または residential | |
proxyCountry | string | US、UK、DE、IE、FR、IT、SE、BR、CA、JP、SG、IN、ID のいずれかです | |
headers | object | カスタムリクエストヘッダー | |
wait | number | ページ読み込み後に待機するミリ秒数 | |
waitFor | string | 読み取り前に待機する CSS セレクター | |
jsScenario | array | ページ上で実行するアクションです。以下を参照してください | |
extractRules | object | 名前付きフィールドを抽出する CSS セレクター | |
aiExtractRules | object | LLM がページから値を入力する型付きスキーマ | |
extractLinks | boolean | ページのリンクを収集します | |
extractEmails | boolean | ページ上のメールアドレスを収集します | |
screenshot | boolean | レンダリングしたページをキャプチャします | |
blockResources | boolean | 画像とスタイルシートをスキップします | |
blockAds | boolean | 広告リクエストをスキップします | |
blockUrls | array | これらの URL をスキップします | |
includeOnlyTags | array | これらのセレクターに一致する要素のみを残します | |
excludeTags | array | これらのセレクターに一致する要素を除外します | |
removeBase64Images | boolean | 出力からインラインの base64 画像を削除します |
extractRules はフィールド名を CSS セレクターに対応付けます。テキストではなく属性を読み取るには @attr を使います。
{ "title": "h1", "link_href": "a#link @href", "page_text": "body" }
jsScenario は順番に実行するアクションの配列で、click、wait、waitFor、waitForAndClick、scrollX、scrollY、fill、任意の JavaScript を実行する evaluate に対応しています。使用するには jsRendering を有効にする必要があります。
aiExtractRules では、必要なデータの形を指定すると、モデルが HTML から値を入力します。各キーは出力フィールドで、型には string、number、boolean、list、またはネストされたオブジェクトを表す item を指定します。
プロンプトとリソース
このサーバーにはプロンプトが 1 つ付属しています。これは、ユーザー自身がツール呼び出しを組み立てる代わりに、クライアントが提示できる、すぐに使えるワークフローです。
| プロンプト | 機能 |
|---|---|
scrape_web_page | 任意の公開ウェブページを取得し、その内容を要約します。 |
さらに、サーバーは 2 つのリソースを公開しています。それぞれ、受け付ける値が固定リストであるパラメーターに対応しています。拒否された呼び出しから値の種類を学ぶよりも、リソースを読み取るほうが効率的で、クレジットも消費しません。各 URI は hasdata://web_scraping/<parameter> です。
| パラメーター | 値の数 | 選択する内容 |
|---|---|---|
proxyType | 2 | 使用するプロキシの種類です。 |
proxyCountry | 13 | 任意のプロキシの国コードです。 |
どちらのリストも API キーなしで提供されるため、クライアントはユーザーが登録する前に読み取ることができます。
出力形式
初めて呼び出す前に確認しておきたいのがこの部分です。レスポンスの構造は outputFormat によって変わります。
markdown、text、html のいずれか 1 つだけを指定すると、コンテンツはトップレベルの text にプレーン文字列として返されます。
{
"url": "https://api.hasdata.com/scrape/web/",
"status": 200,
"json": null,
"text": "# Example Domain\n\nThis domain is for use in documentation examples without needing permission. Avoid use in operations.\n\n[Learn more](https://iana.org/domains/example)\n"
}
json を単独で、または別の形式と一緒に指定すると、すべての内容が json の中に移動します。トップレベルの text は null になり、指定した形式はページのメタデータとともに、その中のキーとして返されます。
{
"json": {
"requestMetadata": { "id": "7764031a-43f7-4102-8561-a7b7a6f1cbf5", "status": "ok" },
"statusCode": 200,
"statusText": "OK",
"headers": { "server": "nginx", "content-type": "text/html; charset=utf-8" },
"extractedData": { "title": "Hacker News", "firstStory": ["iPhone Duo", "apple.com", "Show HN: What if the speed of light was 5 km/h?"] }
},
"text": null
}
extractedData には extractRules の結果が格納されます。複数の要素に一致するセレクターは、それらすべてを配列として返します。そのため、リスティングページで .titleline a を指定すると、最初の一致だけでなく、すべての一致が返されます。
エラーと失敗時の処理
正常に処理される場合だけを想定せず、これらのケースに備えてください。
extractLinks と extractEmails は、outputFormat に json が含まれていないと何もしません。 links と emails は json オブジェクトの中に格納されます。通常の Markdown レスポンスには格納先がありません。outputFormat: ["text"] でこれらを要求すると、テキストが返されるだけで、リンクは何も返されません。
対象ページで 404 または 403 が返されても、呼び出しは成功扱いになります。 ページ自体のステータスは、json 内の statusCode、またはトップレベルの status として返されます。いずれの場合もリクエスト料金が発生します。本文を解析する前に、ステータスを確認してください。
jsRendering はデフォルトで有効で、呼び出しのコストを左右します。 これを無効にすると、フェッチの料金は 10 クレジットから 1 クレジットになります。ほとんどの静的ページ、ドキュメント、記事、サーバー側でレンダリングされるコンテンツには必要ありません。無効にするとコンテンツが空で返される場合に有効にしてください。
waitFor は wait より優先されます。 固定時間の待機は推測にすぎず、読み込みが遅いと短すぎたり、速いと無駄になったりします。CSS セレクターを使えば、必要な要素が表示されるのを待ち、表示され次第返します。
住宅用プロキシの料金は、データセンタープロキシの 5~15 倍です。 データセンタープロキシでのフェッチがブロックされた場合に使い、デフォルトでは使わないでください。
includeOnlyTags と excludeTags は querySelectorAll のセレクターを受け取ります。 無効なセレクターを指定してもエラーにはならず、絞り込みが行われません。そのため、レスポンスに不自然なほど多くの内容が含まれている場合は、誤記がないか確認してください。
aiExtractRules は HTML に対してモデルを実行するため、無料ではなく、結果も一定ではありません。 同じページに対する 2 回の呼び出しでも、表現が異なる場合があります。CSS セレクターで対応できる場合は、より安価で再現性のある extractRules を使ってください。
データを含む結果には、サポートへの問い合わせ時に伝えると役立つ requestMetadata.id も含まれています。
料金、無料枠、制限
コストは 2 つの設定で決まり、それ以外の要素では変わりません。
| データセンタープロキシ | 住宅用プロキシ | |
|---|---|---|
jsRendering: false | 1 クレジット | 5 クレジット |
jsRendering: true | 10 クレジット | 15 クレジット |
レンダリングはデフォルトで有効なため、設定していない呼び出しの料金は 10 クレジットです。静的ページを jsRendering: false でフェッチすると 1 クレジットになるため、ブラウザーが不要な場合はカタログ内で最も安価なツールです。
無料枠は、カード不要で毎月 1,000 クレジットです。通常のフェッチなら 1,000 回、レンダリングを使う場合は 100 回利用できます。請求サイクルごとに更新されます。
有料プランは、200,000 クレジットで 月額 59 ドルから利用できます。通常のフェッチなら 200,000 回、レンダリングを使う場合は 20,000 回分です。利用量に応じて単価は下がります。詳しくは大容量プランをご覧ください。
同時実行数もプランによって決まります。無料枠では同時に 1 リクエスト、Startup では 5、Basic では 15 リクエストが可能で、Growth の各プランでは 50~500 リクエストを実行できます。無人で実行する処理では、429 が返された場合にバックオフを入れて再試行してください。URL のリストをクロールするエージェントは、すぐに同時実行数の上限に達します。
クレジットが消費されるのは、リクエストが成功した場合のみです。404 を返すページも、404 のフェッチ自体は成功です。
比較
比較する価値があるのは、自分でページを取得する方法と、このカタログにあるほかのツールです。
自分のコードでの fetch | 専用の HasData ツール | このサーバー | |
|---|---|---|---|
| ボット対策によるブロック | よくあります | 対応済み | 対応済み |
| JavaScript を多用するページ | 自分で実行するブラウザーが必要です | 対応済み | パラメーターで指定 |
| 地域ターゲティング | 自分で用意するプロキシ | 組み込み | パラメーターで指定 |
| 出力 | 生の HTML | サイト向けに解析されたフィールド | Markdown、テキスト、HTML、JSON |
| 対応範囲 | あらゆるサイト | 専用ツールがあるサイト | 公開されているあらゆるサイト |
| コスト | 自分のインフラ | 呼び出しごと | 1 回の呼び出しにつき 1 クレジットから |
専用ツールと比較した場合、決め手となるのは対応範囲です。Amazon、Zillow、Yelp などのサイトでは、そのサイト専用のパーサーが保守されているため、型付きフィールドが返されます。このサーバーはあらゆるサイトのページを返し、解析はユーザーに任せます。そのため、専用ツールがない場合に限り、適切な選択肢となります。
自分の fetch と比較する場合、問題は対象サイトが取得を妨げてくるかどうかです。アクセスしやすいページなら、自分のコードで無料で取得できるため、クレジットを使う価値はありません。
よくある質問
Web スクレイピング MCP サーバーとは何ですか?
MCP サーバーは、AI クライアントが呼び出せるツールを公開します。このサーバーでは、エージェントが管理されたプロキシ経由で公開 URL を取得し、Markdown、テキスト、HTML、構造化 JSON として受け取れます。スタックにブラウザーやプロキシプールを用意する必要はありません。
自分でプロキシやヘッドレスブラウザーを用意する必要はありますか?
いいえ。どちらもサーバー側で用意されています。必要な認証情報は HasData キーだけです。
呼び出しのコストを抑えるにはどうすればよいですか?
jsRendering: false を設定してください。これにより、10 クレジットではなく 1 クレジットになります。レンダリングが必要な場合は blockResources を追加すると、ブラウザーが画像やスタイルシートを読み込まなくなります。
ページのレンダリングが必要かどうかは、どうすればわかりますか?
まずレンダリングなしで 1 クレジットを使って取得してください。必要なコンテンツが含まれていれば、それで完了です。本文が空のシェルとして返された場合は、レンダリングしてください。
フォームに入力したり、次のページへ移動するためにクリックしたりできますか?
はい。jsScenario を使うと、レンダリングされたページ上で click、fill、waitFor、scrollY、evaluate の各ステップを順番に実行できます。
extractRules と aiExtractRules の違いは何ですか?
extractRules では CSS セレクターを指定します。低コストで高速かつ再現性があります。aiExtractRules では必要なフィールドを説明し、モデルにページを読み取らせます。構造を特定できないページにも対応できますが、コストが高く、実行ごとに結果が異なる場合があります。
スクリーンショットを取得できますか?
はい。レンダリングを伴う呼び出しで screenshot: true を指定してください。
ほかの HasData API と組み合わせて使えますか?
はい。1 つのキーですべての API を利用でき、apis パラメーターを使えば、1 つのエンドポイントですべてにアクセスできます。クライアントの接続先を ?apis=web_scraping,google_serp にすると、両方のツールセットを利用できます。また、 mcp.hasdata.com/mcp に接続すると、カタログ全体を利用できます。
HasData は取得先のサイトと提携していますか?
いいえ。HasData は独立したサービスです。このツールは指定されたページを取得するため、返されるのはそのサイトが公開している情報です。そのサイトの利用規約と適用される法律に従って使用する責任は、ユーザーにあります。
コンプライアンスと個人データ
このツールは指定された場所へアクセスするため、サイト専用のツールよりも多くの責任がユーザーにあります。構築を始める前に、2 つの点を検討する必要があります。extractEmails はメールアドレスを収集します。メールアドレスは GDPR 上の個人データであり、マーケティング目的での利用については CAN-SPAM 法、ePrivacy ルールおよびそれらに相当する規制でも別途規制されています。また、ログイン必須、ペイウォールのあるページや、robots によるクロール除外の対象ページは、プロキシでアクセスできるからといって公開情報になるわけではありません。実際に公開されている情報だけを取得し、目的に必要な情報だけを保持して、自身に適用される義務を確認してください。
HasData のリンク
- Web Scraping API:このツールの基盤となる REST エンドポイント
- パラメーターリファレンス
- リクエスト料金
- 構造化データ抽出
- MCP サーバーのドキュメント
- 料金
- ダッシュボード
その他の HasData MCP サーバー:Google Search、Google Images、Google Scholar、Google Maps、Google Trends、Bing、DuckDuckGo、YouTube、TikTok、Instagram、Amazon、Walmart、Shopify、Yelp、Yellow Pages、Zillow、Redfin、Airbnb、Booking.com、Indeed、Glassdoor。
開発
ランチャーはリモートサーバーへの薄い stdio ブリッジなので、ビルドは不要です。
npm install
HASDATA_API_KEY=your_key_here npm test
test/ のテストでは、ここでコミットしなくても変更される可能性のあるツールの契約を検証します。?apis=web_scraping が期待される唯一のツールを返すこと、その名前が変更されていないこと、引き続き url が必須で説明が付いていること、この README に記載されたパラメーターがスキーマに含まれていること、使用中のキーが実際に受け入れられることを確認します。
出力形式の動作を固定するテストが2つあります。これは、この README の読者が最もつまずきやすく、リファクタリングで最も変更されやすい部分だからです。1つ目は markdown のみを要求し、コンテンツがトップレベルで文字列として返されることを検証します。もう1つは extractRules を指定して json を要求し、抽出結果が json 内の extractedData に格納されることを検証します。どちらもレンダリングなしで実行されるため、この2つのテストで消費するクレジットは2です。
上流のツール一覧はこのリポジトリに変更がなくても変わる可能性があるため、契約テスト一式はスケジュールに従って毎週実行されます。
貢献
ツールの一覧表、レスポンスのサンプル、または実際の動作と一致しない説明を見つけた場合は、Issue を作成してください。そのためのテンプレートがあります。同様の修正やランチャーに関する変更のプルリクエストも歓迎します。
ライセンス
MIT。詳細はLICENSEを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。