Heritrix3 REST API 使用指南:全面掌握爬虫控制接口
概述
Heritrix3 作为 Internet Archive 开发的开源、可扩展、Web规模的归档质量网络爬虫项目,提供了强大的 REST API 接口,允许开发者通过编程方式完全控制爬虫作业。本文将深入解析 Heritrix3 REST API 的完整功能和使用方法。
核心概念
REST API 架构
Heritrix3 使用 Restlet 框架实现 RESTful 架构,通过 HTTPS 协议提供服务。API 设计遵循 REST 原则,资源通过 URI 标识,操作通过 HTTP 方法实现。
认证机制
所有 API 请求都需要基本认证(Basic Authentication),默认用户名为 admin,密码为 admin。
响应格式
API 支持两种响应格式:
- XML格式:设置
Accept: application/xml头 - HTML格式:默认格式,提供可视化界面
API 端点详解
1. 引擎状态查询
# 获取引擎状态(XML格式)
curl -v -k -u admin:admin --anyauth --location \
-H "Accept: application/xml" https://localhost:8443/engine
# 响应示例
<engine>
<heritrixVersion>3.3.0-SNAPSHOT</heritrixVersion>
<heapReport>
<usedBytes>69529904</usedBytes>
<totalBytes>589824000</totalBytes>
<maxBytes>2885681152</maxBytes>
</heapReport>
<jobsDir>/heritrix/jobs</jobsDir>
<availableActions>
<value>rescan</value>
<value>add</value>
<value>create</value>
</availableActions>
<jobs>
<value>
<shortName>myjob</shortName>
<url>https://localhost:8443/engine/job/myjob</url>
<isProfile>false</isProfile>
<statusDescription>Unbuilt</statusDescription>
</value>
</jobs>
</engine>
2. 作业管理接口
创建新作业
# 创建新爬虫作业
curl -v -d "createpath=myjob&action=create" -k -u admin:admin \
--anyauth --location -H "Accept: application/xml" https://localhost:8443/engine
添加作业目录
# 添加现有作业目录
curl -v -d "action=add&addpath=/path/to/job" -k -u admin:admin \
--anyauth --location -H "Accept: application/xml" https://localhost:8443/engine
重新扫描作业目录
# 重新扫描作业目录
curl -v -d "action=rescan" -k -u admin:admin \
--anyauth --location -H "Accept: application/xml" https://localhost:8443/engine
3. 作业操作接口
获取作业状态
# 获取作业详细信息
curl -v -k -u admin:admin --anyauth --location \
-H "Accept: application/xml" https://localhost:8443/engine/job/myjob
响应包含丰富的作业信息:
| 字段 | 描述 | 示例值 |
|---|---|---|
crawlControllerState | 爬虫控制状态 | FINISHED |
downloadedUriCount | 已下载URI数量 | 3920 |
queuedUriCount | 队列中URI数量 | 0 |
averageDocsPerSecond | 平均文档下载速度 | 0.635 |
elapsedPretty | 运行时间 | 1h42m49s176ms |
构建作业配置
# 构建作业配置
curl -v -d "action=build" -k -u admin:admin \
--anyauth --location https://localhost:8443/engine/job/myjob
启动爬虫作业
# 启动作业(从最新检查点)
curl -v -d "action=launch&checkpoint=latest" -k -u admin:admin \
--anyauth --location https://localhost:8443/engine/job/myjob
# 启动新爬虫
curl -v -d "action=launch" -k -u admin:admin \
--anyauth --location https://localhost:8443/engine/job/myjob
暂停与恢复作业
# 暂停作业
curl -v -d "action=pause" -k -u admin:admin \
--anyauth --location https://localhost:8443/engine/job/myjob
# 恢复作业
curl -v -d "action=unpause" -k -u admin:admin \
--anyauth --location https://localhost:8443/engine/job/myjob
终止与拆除作业
# 终止运行中的作业
curl -v -d "action=terminate" -k -u admin:admin \
--anyauth --location https://localhost:8443/engine/job/myjob
# 拆除作业配置
curl -v -d "action=teardown" -k -u admin:admin \
--anyauth --location https://localhost:8443/engine/job/myjob
创建检查点
# 创建检查点
curl -v -d "action=checkpoint" -k -u admin:admin \
--anyauth --location https://localhost:8443/engine/job/myjob
4. 高级功能接口
复制作业配置
# 复制作业配置
curl -v -d "copyTo=mycopy&asProfile=on" -k -u admin:admin \
--anyauth --location https://localhost:8443/engine/job/myjob
执行脚本
# 执行BeanShell脚本
curl -v -d "engine=beanshell&script=System.out.println(\"test\");" \
-k -u admin:admin --anyauth --location https://localhost:8443/engine/job/myjob/script
支持多种脚本引擎:
beanshell- BeanShell脚本js- ECMAScript/JavaScriptgroovy- Groovy脚本AppleScriptEngine- AppleScript
提交CXML配置文件
# 提交CXML配置文件
curl -v -T my-crawler-beans.cxml -k -u admin:admin \
--anyauth --location https://localhost:8443/engine/job/myjob/jobdir/crawler-beans.cxml
状态码与错误处理
常见HTTP状态码
| 状态码 | 含义 | 处理建议 |
|---|---|---|
200 | 成功 | 操作成功完成 |
404 | 未找到 | 检查作业名称或路径 |
401 | 未授权 | 检查认证信息 |
500 | 服务器错误 | 查看服务器日志 |
错误响应示例
<error>
<code>404</code>
<message>Job not found: myjob</message>
<description>The requested job does not exist</description>
</error>
实用工具与技巧
cURL 参数详解
# 完整cURL命令示例
curl -v \ # 详细输出
-d "action=launch" \ # POST数据
-k \ # 忽略SSL证书验证
-u admin:admin \ # 基本认证
--anyauth \ # 支持任何认证方式
--location \ # 跟随重定向
-H "Accept: application/xml" \ # 指定响应格式
https://localhost:8443/engine/job/myjob
自动化脚本示例
#!/bin/bash
# Heritrix3 作业管理脚本
HERITRIX_HOST="https://localhost:8443"
AUTH="admin:admin"
# 函数:获取作业状态
get_job_status() {
local job_name=$1
curl -s -k -u $AUTH --anyauth \
-H "Accept: application/xml" \
$HERITRIX_HOST/engine/job/$job_name
}
# 函数:启动作业
start_job() {
local job_name=$1
curl -s -k -u $AUTH --anyauth \
-d "action=launch" \
$HERITRIX_HOST/engine/job/$job_name
}
# 函数:监控作业进度
monitor_job() {
local job_name=$1
while true; do
status=$(get_job_status $job_name | grep -oP '<crawlControllerState>\K[^<]+')
echo "Job $job_name status: $status"
if [[ "$status" == "FINISHED" ]]; then
echo "Job completed successfully"
break
fi
sleep 30
done
}
# 使用示例
# start_job "my_crawl_job"
# monitor_job "my_crawl_job"
性能优化建议
1. 连接池配置
对于高频API调用,建议使用连接池:
// Java示例:使用Apache HttpClient
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionTimeToLive(30, TimeUnit.SECONDS)
.setMaxConnTotal(100)
.setMaxConnPerRoute(20)
.build();
2. 批量操作优化
避免频繁的小请求,尽量使用批量操作:
# 批量创建多个作业
for job in job1 job2 job3; do
curl -s -d "createpath=$job&action=create" \
-k -u admin:admin $HERITRIX_HOST/engine
done
3. 异步处理
对于长时间运行的操作,使用异步调用模式:
# Python异步示例
import asyncio
import aiohttp
async def control_heritrix():
async with aiohttp.ClientSession() as session:
# 异步启动多个作业
tasks = []
for job in jobs:
task = session.post(
f"{HERITRIX_HOST}/engine/job/{job}",
data={"action": "launch"},
auth=aiohttp.BasicAuth('admin', 'admin'),
ssl=False
)
tasks.append(task)
await asyncio.gather(*tasks)
安全最佳实践
1. 认证安全
# 使用环境变量存储密码,避免硬编码
export HERITRIX_PASSWORD="secure_password"
curl -k -u admin:$HERITRIX_PASSWORD $HERITRIX_HOST/engine
2. SSL/TLS 配置
# 使用正式证书(生产环境)
curl --cacert /path/to/ca-certificate.pem \
-u admin:admin $HERITRIX_HOST/engine
3. 访问控制
# Nginx反向代理配置示例
location /engine/ {
proxy_pass https://heritrix-internal:8443/engine/;
proxy_set_header Authorization "Basic YWRtaW46YWRtaW4=";
allow 192.168.1.0/24;
deny all;
}
故障排除
常见问题解决
-
连接拒绝
# 检查Heritrix服务状态 netstat -tlnp | grep 8443 # 检查防火墙设置 iptables -L -n -
认证失败
# 验证密码文件 cat /path/to/heritrix/users.properties -
作业状态异常
# 查看作业日志 curl -k -u admin:admin $HERITRIX_HOST/engine/job/myjob/jobdir/logs/crawl.log
总结
Heritrix3 REST API 提供了完整的爬虫控制能力,通过合理的API设计和丰富的功能接口,使得自动化爬虫管理成为可能。掌握这些API接口,可以帮助开发者构建强大的网络爬虫管理系统,实现爬虫作业的自动化部署、监控和维护。
记住始终遵循 robots.txt 规则,设置合理的爬取频率,并在User-Agent中提供联系信息,做一个负责任的网络爬虫使用者。
提示:本文基于 Heritrix3 最新版本编写,具体API可能因版本差异而略有不同,建议参考官方文档获取最新信息。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



