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 密钥,三种执行模式。所有端点均位于 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 表示服务器错误(可重试)。

三种执行模式

模式延迟适用场景端点
网页抓取 API秒级任意 URL——JS 渲染、CSS/AI 提取、截图POST /scrape/web
抓取 API(同步)秒级已知平台的预解析 JSON(Google、Amazon、Zillow 等)GET /scrape/<vertical>/<resource>
抓取任务(异步)数分钟至数小时批量提取、递归爬取、Webhook 分发POST /scrapers/<slug>/jobs

选择规则。 如果该平台有对应的抓取 API(可获取预解析 JSON,无需维护选择器),默认使用它。对于 API 未覆盖的任意 URL,使用网页抓取。仅在不存在等效 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 上下文,无需向量数据库。
  • 地图 → 潜在客户。 /scrape/google-maps/search 会返回网站和电话号码;再将结果分发到 /scrape/web,并设置 extractEmails: true,以获取完整的潜在客户数据行。
  • 爬虫 → 语料库。 使用 crawler 抓取任务,设置 outputFormat: ["markdown"] 和 includePaths: "/docs/.+",一次提交即可生成适用于大模型的语料库。
  • 通过 SERP 富媒体摘要预先提取。 knowledgeGraph、localResults、inlineShoppingResults、relatedQuestions 包含预解析事实,可绕过反机器人机制。抓取前务必先检查这些字段。

何时从代码中调用(接入方式)

  • 身份验证: 每个请求都需在 x-api-key 请求头中提供密钥。从 HASDATA_API_KEY 环境变量读取。切勿硬编码或记录日志。
  • 超时: 将客户端超时设为 ≥ 300 s。 HasData 自身的截止时间为 300 s;客户端超时时间更短会导致误报失败,而请求完成后仍会计费。
  • 重试: 仅重试 429 和 5xx——采用指数退避和随机抖动。切勿重试 4xx(身份验证、验证错误)。
  • 并发: 将并发数限制在套餐上限内。免费套餐的上限为 1;更高的并发数只会产生 429 错误。
  • 异步任务: 提交响应中的句柄是 body.id(整数),而不是 jobId。请立即持久化该值。每隔 10–30 s 通过 GET /scrapers/jobs/<id> 轮询,并采用退避策略;Webhook 只能作为尽力而为的通知,始终应配合轮询使用。任务状态变为 finished 时会携带 data: {csv, json, xlsx} 中的短时有效 URL——请立即下载。

参阅 references/code-recipes.md,获取可直接粘贴使用的 Python 和 TypeScript 客户端示例,涵盖重试、退避、有界并发以及完整的任务生命周期。

常见注意事项

  • 服务器截止时间为 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 次。 请始终准备轮询备用方案。

参考资料

资源

评论

支持 Markdown