关于 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 密钥,三种执行模式。所有端点均位于 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 次。 请始终准备轮询备用方案。
参考资料
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 客户端。
资源
评论
支持 Markdown