适用场景:何时需要网页元数据提取API
在内容聚合、社交分享、SEO监控或技术调研中,开发者经常需要快速获取目标网页的标题、描述、关键词、OG/Twitter Card信息,以及页面所使用的技术栈。手动解析HTML不仅效率低,而且容易受到页面结构变化的影响。通过调用专门的元数据提取API,可以用统一接口、标准化输出完成这些任务。典型场景包括:
- SEO检测:批量分析站点标题是否完整、描述是否达标、关键词是否缺失。
- 链接预览:在聊天、博客或邮件系统中生成卡片预览(利用OG/Twitter Card)。
- 技术调研:了解竞争对手或参考网站的前端框架、分析工具、CDN提供商等。
- 数据抓取预处理:在正式爬取前先提取页面元数据,判断页面类型和主题。
接口能力边界
本接口为 GET 请求,端点地址为 https://v1.apizero.cn/api/webmeta。每次请求可提取一个目标URL的以下信息:
- 网页标题(
title) - 网页描述(
description,从meta标签或OG/Twitter Card中提取) - 关键词(
keywords) - OG/Twitter Card 元标签(如
og:title、og:description、twitter:card等) - 网站图标(favicon URL)
- 30+ 项技术栈自动识别:包括前端框架(React、Vue、Angular、Next.js、Nuxt.js)、CMS(WordPress、Drupal、Joomla)、分析工具(Google Analytics、Baidu Analytics)、CDN与云服务(Cloudflare、Fastly)等。
配额限制:单个账户的QPS为 5 次/秒,超过该频率将返回 429 错误。建议在调用时控制并发,或实现本地缓存策略。
请求参数与鉴权详解
Query参数
| 参数 | 类型 | 必需 | 说明 | 示例 |
|---|---|---|---|---|
url |
string | 是 | 目标网页的完整URL。如果省略协议(http://或https://),接口会自动补全为 https://。URL中若包含中文或特殊字符,需自行进行百分号编码(encodeURIComponent)。 |
https://example.com |
鉴权方式
每个请求需要在HTTP头部携带 X-API-Key 字段,值为你的API密钥。密钥通常在平台控制台生成,请妥善保管。
示例头部:
http
X-API-Key: YOUR_API_KEY_HERE
若未提供有效密钥,接口将返回 401 Unauthorized。
可复制的curl示例
以下curl命令演示如何调用接口获取百度首页的元数据。请将 $APIZERO_API_KEY 替换为你的实际密钥:
bash
curl -sS \
-X GET \
-H "X-API-Key: $APIZERO_API_KEY" \
"https://v1.apizero.cn/api/webmeta?url=https://baidu.com"
若将 url 参数直接写在URL中,需注意对特殊字符进行编码。或者使用 --data-urlencode 方式(需要变为POST?这里保持GET),推荐在脚本中先对URL进行编码再拼接。
返回值结构解读
一个成功(HTTP 200)的响应示例(已格式化):
json
[
{
"code": 0,
"msg": "成功",
"data": {
"http_code": 200,
"title": "百度一下,你就知道",
"url": "https://www.baidu.com/",
"tech_stack": [
"jQuery",
"Baidu Analytics"
]
}
}
]
返回类型:顶层是一个数组,内部包含一个对象。虽然示例中数组只有一个元素,但设计上可能支持批量(以官方文档为准)。
顶层字段
| 字段 | 类型 | 说明 |
|---|---|---|
code |
integer | 业务状态码。0 表示成功,其他值表示错误。 |
msg |
string | 状态说明,如"成功"或错误描述。 |
data |
object | 元数据提取结果(仅在成功时存在)。 |
data内部字段详解
| 字段 | 类型 | 说明 |
|---|---|---|
http_code |
integer | 目标网页的HTTP状态码。如果对方服务器返回404,此处会显示404。 |
title |
string | 网页标题(<title>标签内容)。 |
description |
string | 网页描述(来自meta name="description"或og:description)。若未找到则为空字符串。 |
keywords |
string | 网页关键词(meta name="keywords")。若有多个关键词通常以逗号分隔,此处原样返回。 |
favicon |
string | favicon图标的完整URL。 |
og |
object | OG协议相关属性,如 og:title、og:description、og:image、og:url 等。若无则可能缺失该字段。 |
twitter |
object | Twitter Card相关属性,如 twitter:card、twitter:site 等。 |
tech_stack |
arraystring | 识别到的技术栈列表。每个元素为技术名称,如 "React"、"Vue"、"Next.js"、"WordPress"、"Cloudflare"、"Google Analytics" 等。 |
注意:description、keywords、favicon、og、twitter 等字段在示例中未完全展示,实际返回以官方文档为准。本文仅基于素材提供的示例,更多字段可查阅文档。
常见错误与处理建议
| 状态码 | 含义 | 常见原因 | 处理建议 |
|---|---|---|---|
| 400 | Bad Request | 缺少必填参数 url 或参数格式错误(如URL无效)。 |
检查 url 参数是否提供,且为合法URL。 |
| 401 | Unauthorized | 未提供 X-API-Key 或密钥无效。 |
确认密钥已正确设置并生效。 |
| 429 | Too Many Requests | 超过QPS限制(5次/秒)。 | 降低请求频率,或引入间隔重试。 |
| 500+ | Server Error | 后端服务异常。 | 等待后重试,若持续失败可联系技术支持。 |
业务错误处理 :当 code 不为0时,需通过 msg 获取具体错误描述。例如,如果目标URL无法访问,http_code 可能显示非200,但接口仍返回成功(code=0),此时应检查 data.http_code 判断对方网页状态。
工程化注意事项
- URL预处理 :传入前先确保URL格式正确,包括协议部分。建议使用语言内置URL解析库(如Python的
urllib.parse)进行标准化,避免因编码问题导致提取失败。 - 缓存策略:对于同一URL,其元数据在短时间内很少变化。可对结果进行本地缓存(如Redis,TTL设为1~6小时),减少API调用量和应对限流。
- 并发控制 :QPS限制为5,若需批量处理大量URL,建议使用队列控制并发数,或使用
asyncio+aiohttp配合信号量限制并发。 - 超时设置:网络请求可能因目标服务器响应慢而超时。建议在客户端设置合理的超时(如10秒),避免长时间阻塞。
- 错误重试:针对429或5xx错误,可采用指数退避重试(如初次等待1秒,第二次2秒,第三次4秒,最多3次)。
- 日志记录:记录每次请求的URL、响应状态和耗时,便于排查异常和优化调用。
参考文档
(注意:实际使用前请确认文档最新版本,以获取完整的字段说明与更新日志。)