mcpField
H
HasData Web Scraping

HasData Web Scraping

远程服务
hasdata.com浏览器自动化102 周前更新

关于 HasData Web Scraping

HasData Web Scraping 是面向 MCP 客户端的托管网页抓取服务,适用于需要读取公开网页内容的用户。它支持 JavaScript 渲染、代理访问,并可返回多种文本或结构化格式。

主要功能

  1. 01抓取公开网页
  2. 02按需渲染 JavaScript
  3. 03使用数据中心或住宅代理
  4. 04输出 Markdown、文本、HTML 或 JSON
  5. 05通过 CSS 规则提取字段与链接

适用场景

  1. 01提取文档页面中的代码块
  2. 02抓取动态加载的网页内容
  3. 03按指定字段整理页面数据

MCP 相关

作为托管远程服务,它向 MCP 客户端提供网页抓取工具,并提供抓取网页的提示词及代理选项资源。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.hasdata.com/mcp?apis=web_scraping
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://mcp.hasdata.com/mcp?apis=web_scraping需要授权
安装包
npm@hasdata/web-scraping-mcp1.0.2
pypihasdata-web-scraping-mcp1.0.2

工具

2
参数类型必填说明
petsnumber否宠物数量。
neLatnumber否地图边界框东北角的纬度。提供全部四个边界框坐标后,将在框内搜索房源,而不是按位置搜索。
neLngnumber否地图边界框东北角的经度。
swLatnumber否地图边界框西南角的纬度。
swLngnumber否地图边界框西南角的经度。
adultsnumber否成人数量。
checkInstring是房源的入住日期。
infantsnumber否婴幼儿数量。
checkOutstring否房源的退房日期。
childrennumber否子女数量。
locationstring否用于搜索房源的地点。除非提供完整地图边界框(neLat、neLng、swLat、swLng),否则必填。
nextPageTokenstring否用于获取下一页结果的令牌。

详细介绍

网页抓取 MCP 服务

一个托管的 Model Context Protocol(MCP)服务,为 Claude、Cursor、Windsurf 和任何其他 MCP 客户端提供一个只读工具,用于获取任意公开网页。它通过托管代理发出请求,在页面需要时渲染 JavaScript,并返回干净的 Markdown、纯文本、原始 HTML 或结构化 JSON,无需自行托管,也无需在技术栈中配置浏览器。

当网站没有专用 API 时,这就是备用方案。如果网站已收录在 HasData 目录中,该工具会返回解析后的字段,而此工具会返回网页。

每月提供 1,000 个免费额度,无需银行卡。 普通抓取消耗 1 个额度,因此免费套餐可支持 1,000 次抓取。

https://mcp.hasdata.com/mcp?apis=web_scraping

Glama 评分 工具契约 MCP 工具

目录

所需条件

一个 MCP 客户端,以及从 控制面板获取的 HasData API 密钥,注册免费且无需银行卡。这是一个远程服务,因此最简单的接入方式是使用 URL 和 x-api-key 请求头,无需运行容器。只支持 stdio 的客户端可通过一个轻量启动器访问该服务,该启动器已发布到 npm,包名为 @hasdata/web-scraping-mcp;也已发布到 PyPI,包名为 hasdata-web-scraping-mcp,如下所示。

快速开始

所有客户端使用相同的服务 URL。我们已在 Claude Code 和 Claude Desktop 中实际运行。其他配置块遵循各客户端针对远程服务的文档格式。

字段值
URLhttps://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

依次点击 Settings、Connectors、Add custom connector,然后粘贴 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" }
    }
  }
}

如果使用 Python 而不是 Node,请将启动器替换为 PyPI 软件包,uvx 无需手动安装即可运行它:

{
  "mcpServers": {
    "web-scraping": {
      "command": "uvx",
      "args": ["hasdata-web-scraping-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}
Cursor

每个项目都使用 ~/.cursor/mcp.json,或者单个项目使用 .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 将该字段称为 serverUrl,而不是 url:

{
  "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" }
    }
  }
}

提示词示例

  • 获取此页面并将其整理成 Markdown 摘要。
  • 阅读此文档页面,并提取其中的所有代码块。
  • 以 JSON 格式获取此网站首页上的标题和链接。
  • 此页面通过 JavaScript 加载内容,因此请渲染页面,并等待结果列表出现后再读取。
  • 通过德国住宅代理获取此页面,并告诉我价格是否有所不同。
  • 截取此页面的屏幕截图。

每个示例都只需调用一次即可完成。它们的区别在于你要求浏览器执行多少操作,而这决定了调用成本。

工具

工具返回内容
hasdata_web_scraping_web_scraping_scrapeWebPageHTML、文本、Markdown 和/或 JSON,以及状态码、提取的电子邮件和链接、CSS 选择器提取结果,以及按架构结构化的 AI 字段。普通抓取每次调用消耗 1 个积分,启用 JS 渲染则消耗 10 个积分

只有一个工具。成本取决于你启用的功能,详见定价、免费额度和限制。

抓取网页

hasdata_web_scraping_web_scraping_scrapeWebPage

抓取一个 URL。

参数类型必填说明
urlstring是要抓取的页面
outputFormatarray可选值:markdown、text、html、json。参见输出格式
jsRenderingboolean在浏览器中渲染页面。默认开启,也是影响成本的主要因素
proxyTypestringdatacenter 或 residential
proxyCountrystringUS、UK、DE、IE、FR、IT、SE、BR、CA、JP、SG、IN 或 ID
headersobject自定义请求标头
waitnumber加载后等待的毫秒数
waitForstring读取页面前等待的 CSS 选择器
jsScenarioarray要在页面上执行的操作。见下文
extractRulesobject用于提取命名字段的 CSS 选择器
aiExtractRulesobject由大模型从页面中填充的类型化架构
extractLinksboolean收集页面中的链接
extractEmailsboolean收集页面中的电子邮件地址
screenshotboolean捕获渲染后的页面
blockResourcesboolean跳过图片和样式表
blockAdsboolean跳过广告请求
blockUrlsarray跳过这些 URL
includeOnlyTagsarray仅保留与这些选择器匹配的元素
excludeTagsarray移除与这些选择器匹配的元素
removeBase64Imagesboolean从输出中移除内嵌的 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。

提示词和资源

此服务提供一个提示词,即现成的工作流,客户端可以直接提供给用户,而无需让用户自行编写工具调用。

提示词功能
scrape_web_page抓取任意公开网页并总结其内容。

此外,该服务还提供 2 个资源,每个资源对应一个可接受值为固定列表的参数。读取资源比从被拒绝的调用中了解可用选项更省事,而且不消耗额度。每个 URI 的格式为 hasdata://web_scraping/<parameter>。

参数值数量用途
proxyType2要使用的代理类型。
proxyCountry13可选的代理国家/地区代码。

两个列表均无需 API 密钥即可获取,因此客户端可以在用户注册前读取它们。

输出格式

首次调用前值得先了解这一点,因为响应结构会随 outputFormat 改变。

仅请求 markdown、text 或 html 中的一种,内容就会以纯字符串的形式出现在顶层的 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 会返回所有匹配项,而不只是第一个。

错误和失败路径

应对这些情况做好规划,而不是假设一切都会顺利。

除非 outputFormat 包含 json,否则 extractLinks 和 extractEmails 不会执行任何操作。 它们会将 links 和 emails 放在 json 对象中,而普通 Markdown 响应中没有可供它们放置的位置。使用 outputFormat: ["text"] 请求它们,只会返回文本,不会返回链接,且不会提示任何错误。

目标页面返回 404 或 403 也算调用成功。 页面自身的状态会作为 statusCode 出现在 json 中,或作为顶层的 status 返回;无论哪种情况,请求都会计费。解析正文前先检查状态。

jsRendering 默认开启,也是调用成本所在。 关闭它可将一次抓取的成本从 10 个积分降至 1 个。大多数静态页面、文档、文章以及任何服务端渲染的页面都不需要它。如果不启用时内容为空,再将它打开。

waitFor 优先于 wait。 固定延迟只是猜测:页面加载慢时可能不够,加载快时又会造成浪费。CSS 选择器会等待你实际需要的内容,并在它出现时立即返回。

住宅代理的价格是数据中心代理的 5 到 15 倍。 只有数据中心抓取被拦截时才使用住宅代理,不要默认使用。

includeOnlyTags 和 excludeTags 接受 querySelectorAll 选择器。 选择器无效时不会筛除任何内容,也不会报错,因此响应内容多得可疑,往往意味着有拼写错误。

aiExtractRules 会让模型处理 HTML,因此既非免费,也无法保证结果一致。 对同一页面调用两次,措辞可能不同。如果 CSS 选择器能完成任务,extractRules 成本更低,结果也可重复。

包含数据的结果还会附带 requestMetadata.id,联系支持时请提供该 ID。

定价、免费套餐和限制

费用取决于两个开关,其他因素不会改变费用。

数据中心代理住宅代理
jsRendering: false1 个积分5 个积分
jsRendering: true10 个积分15 个积分

渲染默认开启,因此未配置的调用费用为 10 个积分。使用 jsRendering: false 抓取静态页面只需 1 个积分;无需浏览器时,这是目录中成本最低的工具。

免费套餐每月提供 1,000 个积分,无需绑定银行卡。这相当于 1,000 次普通抓取,或 100 次渲染抓取。积分会随计费周期续订。

付费套餐起价为每月 $59,包含 200,000 个积分,相当于 200,000 次普通抓取或 20,000 次渲染抓取。随着用量增加,大用量套餐的单价会降低。

套餐还会决定并发数。免费套餐允许同时发起 1 个请求,Startup 为 5 个,Basic 为 15 个,Growth 套餐则从 50 个到 500 个不等。对于无人值守的任务,遇到 429 时应采用退避策略重试,因为 Agent 抓取 URL 列表时,会比你先触及上限。

只有成功的请求才会扣除积分。页面返回 404,仍算成功抓取了一个返回 404 的页面。

对比

值得比较的是自行抓取页面,以及本目录中的其他工具。

在自己的代码中使用 fetch专用 HasData 工具此服务
受机器人防护拦截经常已处理已处理
JavaScript 密集型页面需要自己运行浏览器已处理一个参数
地理定位自己的代理内置一个参数
输出原始 HTML该网站的解析字段Markdown、文本、HTML 或 JSON
覆盖范围任何网站有对应工具的网站任何公开网站
费用自己的基础设施按次计费每次调用 1 个积分起

与专用工具相比,决定性因素是覆盖范围。Amazon、Zillow、Yelp 等网站会返回类型化字段,因为有人维护着这些网站的解析器。此服务会返回任何网站的页面,并将解析工作留给你;只有在没有专用工具时,这种取舍才合适。

与自行使用 fetch 相比,关键在于目标网站是否会拦截请求。对于友好的页面,自己的代码免费,而此服务不值得花费积分。

常见问题

什么是网页抓取 MCP 服务?

MCP 服务会提供 AI 客户端可调用的工具。此服务允许 Agent 通过托管代理抓取任意公开 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 一起使用吗?

可以。一个密钥即可访问所有服务,apis 参数可通过同一个端点提供它们。将客户端指向 ?apis=web_scraping,google_serp,即可在一个连接中获取这两组工具;也可以指向 mcp.hasdata.com/mcp,获取完整目录。

HasData 与我抓取的网站有关联吗?

没有。HasData 是一家独立服务。此工具会抓取你指定的页面,因此返回的内容取决于该网站发布的内容;你有责任确保使用方式符合该网站的条款以及适用于你的法律。

合规与个人数据

此工具可以抓取你指定的任何网站,因此相比针对特定网站的工具,你需要承担更多责任。开始构建之前,有两点值得考虑。extractEmails 会收集电子邮件地址;根据 GDPR,电子邮件地址属于个人数据,而用于营销时,还受 CAN-SPAM Act、ePrivacy 规则及其对应法规的单独约束。此外,登录页、付费墙页面或被 robots 规则排除的页面,不会因为代理能够访问就变成公开页面。只抓取真正公开的内容,只保留实现目的所需的数据,并确认你自身的义务。

HasData 链接

其他 HasData MCP 服务:Google 搜索、Google 图片、Google Scholar、Google 地图、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 中记录的参数是否仍在架构中,以及正在使用的密钥是否确实可用。

有两个测试会固定输出格式行为,因为这是本 README 中读者最容易遇到问题、也最可能在重构时发生变化的部分。一个测试只请求 markdown,并断言内容以顶层字符串的形式返回。另一个测试使用 extractRules 请求 json,并断言提取结果位于 json 内的 extractedData 中。这两个测试都无需渲染即可运行,因此合计耗费 2 个积分。

契约测试套件还会按计划每周运行一次,因为上游工具列表可能在无人修改此仓库的情况下发生变化。

贡献

如果工具表、响应示例或记录的行为与实际情况不符,欢迎提交问题。我们为此提供了专用模板。欢迎提交相关拉取请求,也欢迎提交关于启动器的改进。

许可证

MIT,详见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。