字
字节笔记本
2026年2月22日
Katana - 下一代 Web 爬虫框架
本文介绍 Katana,一个由 ProjectDiscovery 开发的新一代 Web 爬虫和蜘蛛框架。Katana 提供了快速、可配置的网页爬取能力,支持标准模式和 Headless 模式,是安全研究人员和开发者的强大工具。
项目简介
Katana 是一个开源的 Web 爬虫框架,由 ProjectDiscovery 团队开发维护。截至目前,该项目在 GitHub 上已获得 15.6k+ stars 和 947 forks,主要使用 Go 语言(96.6%)编写。
该项目专注于在自动化管道中执行爬取任务,提供标准和 Headless 两种爬取模式,支持 JavaScript 解析和表单自动填充等高级功能。
核心特性
- 快速且完全可配置:高性能的 Web 爬取能力,可根据需求深度定制
- 双模式支持:支持标准模式和 Headless 模式爬取
- JavaScript 解析:能够解析和爬取 JavaScript 文件中的端点
- 自动表单填充:可自定义的自动表单填充功能(实验性)
- 范围控制:支持预配置字段和正则表达式进行爬取范围控制
- 灵活的输入输出:支持 STDIN、URL 列表输入,输出支持 STDOUT、文件和 JSON 格式
- 技术检测:内置技术栈检测功能
- XHR 请求提取:能够提取 XHR 请求的 URL 和方法
技术栈
- Go 1.24+ - 主要开发语言
- JavaScript - 用于浏览器自动化(3.2%)
- Headless Chrome - 无头浏览器支持
- JSluice - JavaScript 解析(内存密集型)
安装指南
前置要求
- Go 1.24 或更高版本
使用 Go 安装
bash
CGO_ENABLED=1 go install github.com/projectdiscovery/katana/cmd/katana@latest其他安装方式
- Docker:可通过 Docker 运行
- Ubuntu:支持 Ubuntu 系统安装
- 预编译二进制文件:从 GitHub Releases 下载
快速开始
查看帮助信息
bash
katana -h基础用法
爬取单个 URL
bash
katana -u https://tesla.com爬取多个 URL(逗号分隔)
bash
katana -u https://tesla.com,https://google.com从文件读取 URL 列表
bash
# 创建 URL 列表文件
cat url_list.txt
# https://tesla.com
# https://google.com
# 执行爬取
katana -list url_list.txt使用管道输入(STDIN)
bash
echo https://tesla.com | katana
# 配合其他工具使用
cat domains | httpx | katana使用示例
场景 1:启用 Headless 模式
Headless 模式可以执行 JavaScript 并爬取动态渲染的内容:
bash
katana -u https://example.com -headless场景 2:JavaScript 端点爬取
启用 JavaScript 文件中的端点解析和爬取:
bash
katana -u https://example.com -js-crawl场景 3:自动表单填充
启用实验性的自动表单填充功能:
bash
katana -u https://example.com -automatic-form-fill场景 4:设置爬取深度和范围
bash
# 设置最大爬取深度为 5
katana -u https://example.com -depth 5
# 使用正则表达式控制爬取范围
katana -u https://example.com -crawl-scope ".*api.*"场景 5:输出为 JSON 格式
bash
katana -u https://example.com -jsonl -o output.json场景 6:技术检测
bash
katana -u https://example.com -tech-detect常用配置选项
输入选项
| 选项 | 说明 |
|---|---|
-u, -list | 目标 URL 或列表 |
-e, -exclude | 排除匹配指定过滤器的主机 |
配置选项
| 选项 | 说明 | 默认值 |
|---|---|---|
-d, -depth | 最大爬取深度 | 3 |
-jc, -js-crawl | 启用 JavaScript 端点爬取 | false |
-ct, -crawl-duration | 最大爬取持续时间 | - |
-timeout | 请求超时时间(秒) | 10 |
-retry | 请求重试次数 | 1 |
-proxy | HTTP/SOCKS5 代理 | - |
Headless 选项
| 选项 | 说明 |
|---|---|
-hl, -headless | 启用 Headless 混合爬取 |
-sc, -system-chrome | 使用系统安装的 Chrome |
-sb, -show-browser | 显示浏览器窗口 |
-nos, -no-sandbox | 以 --no-sandbox 模式启动 |
输出选项
| 选项 | 说明 |
|---|---|
-o, -output | 输出文件 |
-j, -jsonl | 以 JSONL 格式输出 |
-sr, -store-response | 存储 HTTP 请求/响应 |
-silent | 仅显示输出 |
速率限制选项
| 选项 | 说明 | 默认值 |
|---|---|---|
-c, -concurrency | 并发获取器数量 | 10 |
-p, -parallelism | 并发输入处理数 | 10 |
-rl, -rate-limit | 每秒最大请求数 | 150 |
注意事项
- CGO 依赖:安装时需要启用 CGO (
CGO_ENABLED=1) - 内存使用:启用 JSluice 解析会消耗大量内存
- 合法使用:请确保在授权范围内使用本工具
- Headless 模式:需要 Chrome 或 Chromium 浏览器
- 爬取深度:建议根据目标网站规模合理设置深度
项目链接
- GitHub 仓库:https://github.com/projectdiscovery/katana
- 官方文档:README 中包含详细使用说明
- Discord 社区:https://discord.gg/projectdiscovery
- Twitter:https://twitter.com/pdiscoveryio
许可证
Katana 采用 MIT 许可证开源。
分享: