一个使用 Golang 编写的新一代网络爬虫框架,支持JS动态内容爬取
大家好,今天给大家分享一个由ProjectDiscovery组织开发的开源“下一代爬虫框架”Katana,旨在提供高效、灵活且功能丰富的网络爬取体验,适用于各种自动化管道和数据收集任务。

项目介绍
Katana 是 ProjectDiscovery 精心打造的命令行界面(CLI)网页爬虫工具,采用高效的 Golang 语言编写。它专注于提供快速、高效且用户友好的网页数据采集体验,旨在通过爬取网站来全面收集信息和端点。尤为突出的是,Katana 支持先进的无头浏览技术,能够轻松访问并收集由 JavaScript、Angular 或 React 等技术构建的单页应用程序(SPA)中的动态内容。

功能特点
多种爬取模式:支持标准模式和无头模式(Headless),可根据不同的应用场景选择合适的模式进行网页爬取。
JavaScript 解析:能够解析和爬取 JavaScript 内容,这对于现代网页中大量使用 JavaScript 动态加载数据的情况非常有用,可以获取到更全面的网页信息。
自动表单填充:具备实验性的自动表单填充功能,可简化数据输入过程,方便在需要与表单交互的网页中进行数据采集。
范围控制:通过预配置字段和正则表达式,可灵活控制爬取的范围,精准地获取所需的数据。
自定义输出:支持预配置字段,能够根据用户的需求自定义输出的内容和格式,便于后续的数据处理和分析。
多种输入输出方式:输入数据支持 STDIN、URL 和列表文件等形式,输出数据支持 STDOUT、文件和 JSON 格式,方便与其他工具和系统进行集成。
技术优势
高性能:使用 Go 语言开发,充分利用 Go 的高性能特性和并发处理能力,实现快速高效的网络爬取,能够在短时间内处理大量的网页请求。
可配置性强:提供丰富的配置选项,如深度控制、爬取持续时间、最大响应大小等,用户可以根据具体的任务需求进行灵活配置,以达到最佳的爬取效果。
易于扩展:其模块化的设计使得扩展和定制新的扫描策略变得简单易行,开发人员可以轻松地添加新的功能模块或修改现有模块,以满足不断变化的业务需求。
应用场景
网络安全:可用于漏洞扫描和安全审计,帮助安全研究人员快速发现目标网站中的潜在安全漏洞,如结合 Nuclei 等漏洞扫描工具进行自动化漏洞检测。
数据挖掘:能够从网站中提取有价值的信息,如抓取电商网站的产品信息、新闻网站的文章内容等,为数据分析和数据挖掘提供数据支持。
SEO 分析:通过分析网站的结构和内容,帮助优化搜索引擎排名,为网站的 SEO 优化提供数据支持和决策依据。
市场研究:可以收集竞争对手的网站信息,包括产品信息、价格策略、市场活动等,为企业的市场调研和竞争分析提供数据支持。
安装使用
安装
需要Go 1.18才能成功安装。安装时,运行以下命令或从发布页面下载预编译的二进制文件。
CGO_ENABLED=1 go install github.com/projectdiscovery/katana/cmd/katana@latest

使用Docker方式:
docker pull projectdiscovery/katana:latest
使用Docker以标准模式运行Katana:
docker run projectdiscovery/katana:latest -u https://tesla.com
使用Docker以Headless模式运行Katana:
docker run projectdiscovery/katana:latest -u https://tesla.com -system-chrome -headless
使用
例举部分使用案例,完整参数选项。
Katana 是一款专注于自动化管道执行的快速爬虫工具,提供无头和非无头的爬取功能。用法:
katana [flags]标志:
输入:
-u, -list string[] 要爬取的目标 URL / 列表
-resume string 使用 resume.cfg 恢复扫描
-e, -exclude string[] 排除与指定过滤器匹配的主机('cdn', 'private-ips', cidr, ip, regex)配置:
-r, -resolvers string[] 自定义解析器列表(文件或逗号分隔)
-d, -depth int 最大爬取深度(默认 3)
-jc, -js-crawl 在 JavaScript 文件中启用端点解析/爬取
-jsl, -jsluice 在 JavaScript 文件中启用 jsluice 解析(内存密集型)
-ct, -crawl-duration value 最大爬取目标的持续时间(s, m, h, d)(默认 s)
-kf, -known-files string 启用已知文件的爬取(all,robotstxt,sitemapxml),最小深度为 3 以确保正确爬取所有已知文件。
-mrs, -max-response-size int 读取的最大响应大小(默认 9223372036854775807)
-timeout int 请求等待时间,单位秒(默认 10)
-aff, -automatic-form-fill 启用自动表单填充(实验性)
-fx, -form-extraction 在 jsonl 输出中提取表单、输入、textarea 和 select 元素
-retry int 重试请求的次数(默认 1)
-proxy string 要使用的 http/socks5 代理
-H, -headers string[] 以 header:value 格式在所有 http 请求中包含的自定义头部/cookie(文件)
-config string Katana 配置文件的路径
-fc, -form-config string 自定义表单配置文件的路径
-flc, -field-config string 自定义字段配置文件的路径
-s, -strategy string 访问策略(深度优先、广度优先)(默认"深度优先")
-iqp, -ignore-query-params 忽略具有不同查询参数的相同路径的爬取
-tlsi, -tls-impersonate 启用实验性客户端 hello (ja3) TLS 随机化
-dr, -disable-redirects 禁用跟随重定向(默认 false)调试:
-health-check, -hc 运行诊断检查
-elog, -error-log string 写入发送请求错误日志的文件无头:
-hl, -headless 启用无头混合爬取(实验性)
-sc, -system-chrome 使用本地安装的 Chrome 浏览器而不是 Katana 安装的
-sb, -show-browser 在无头模式下显示浏览器
-ho, -headless-options string[] 以附加选项启动无头 Chrome
-nos, -no-sandbox 在 --no-sandbox 模式下启动无头 Chrome
-cdd, -chrome-data-dir string 存储 Chrome 浏览器数据的路径
-scp, -system-chrome-path string 为无头爬取使用指定的 Chrome 浏览器
-noi, -no-incognito 在非隐身模式下启动无头 Chrome
-cwu, -chrome-ws-url string 使用在此 URL 上侦听调试器的其他地方启动的 Chrome 浏览器实例
-xhr, -xhr-extraction 在 jsonl 输出中提取 xhr 请求 url 和方法被动:
-ps, -passive 启用被动源以发现目标端点
-pss, -passive-source string[] 用于 URL 发现的被动源(waybackarchive,commoncrawl,alienvault)范围:
-cs, -crawl-scope string[] 爬虫应遵循的范围内 URL 正则表达式
-cos, -crawl-out-scope string[] 爬虫应排除的范围外 URL 正则表达式
-fs, -field-scope string 预定义的范围字段(dn,rdn,fqdn)或自定义正则表达式(例如,'(company-staging.io|company.com)')(默认"rdn")
-ns, -no-scope 禁用基于主机的默认范围
-do, -display-out-scope 显示从范围内爬取的外部端点过滤:
-mr, -match-regex string[] 要在输出 URL 上匹配的正则表达式或正则表达式列表(cli, file)
-fr, -filter-regex string[] 要在输出 URL 上过滤的正则表达式或正则表达式列表(cli, file)
-f, -field string 要在输出中显示的字段(url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
-sf, -store-field string 要在每个主机输出中存储的字段(url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
-em, -extension-match string[] 匹配给定扩展名的输出(例如, -em php,html,js)
-ef, -extension-filter string[] 过滤给定扩展名的输出(例如, -ef png,css)
-mdc, -match-condition string 使用 DSL 条件匹配响应
-fdc, -filter-condition string 使用 DSL 条件过滤响应速率限制:
-c, -concurrency int 要使用的并发获取器数量(默认 10)
-p, -parallelism int 要处理的并发输入数量(默认 10)
-rd, -delay int 每个请求之间的请求延迟,单位秒
-rl, -rate-limit int 每秒最大请求数(默认 150)
-rlm, -rate-limit-minute int 每分钟最大请求数更新:
-up, -update 更新 Katana 到最新版本
-duc, -disable-update-check 禁用自动 Katana 更新检查输出:
-o, -output string 写入输出的文件
-sr, -store-response 存储 HTTP 请求/响应
-srd, -store-response-dir string 将 HTTP 请求/响应存储到自定义目录
-or, -omit-raw 从 jsonl 输出中省略原始请求/响应
-ob, -omit-body 从 jsonl 输出中省略响应正文
-j, -jsonl 以 jsonl 格式写入输出
-nc, -no-color 禁用输出内容着色(ANSI 转义码)
-silent 仅显示输出
-v, -verbose 显示详细输出
-debug 显示调试输出
-version 显示项目版本
单一 URL 输入
katana -u <https://example.com>
多 URL 输入
katana -u <https://example.com>,<https://another-example.com>
列表文件输入
katana -list url_list.txt
通过 STDIN 输入
echo <https://example.com> | katana
无头模式
katana -u <https://example.com> -headless
域名关键字范围控制
katana -u <https://example.com> -fs dn
设定爬取深度
katana -u <https://example.com> -d 5
已知文件爬取
katana -u <https://example.com> -kf robotstxt,sitemapxml
扩展名过滤
katana -u <https://example.com> -silent -ef css,txt
输出为 JSONL 文件
katana -u <https://example.com> -jsonl -o output.jsonl
存储请求和响应
katana -u <https://example.com> -sr
作为Golang三方库使用
package mainimport ("math""github.com/projectdiscovery/gologger""github.com/projectdiscovery/katana/pkg/engine/standard""github.com/projectdiscovery/katana/pkg/output""github.com/projectdiscovery/katana/pkg/types"
)func main() {options := &types.Options{MaxDepth: 3, // Maximum depth to crawlFieldScope: "rdn", // Crawling Scope FieldBodyReadSize: math.MaxInt, // Maximum response size to readTimeout: 10, // Timeout is the time to wait for request in secondsConcurrency: 10, // Concurrency is the number of concurrent crawling goroutinesParallelism: 10, // Parallelism is the number of urls processing goroutinesDelay: 0, // Delay is the delay between each crawl requests in secondsRateLimit: 150, // Maximum requests to send per secondStrategy: "depth-first", // Visit strategy (depth-first, breadth-first)OnResult: func(result output.Result) { // Callback function to execute for resultgologger.Info().Msg(result.Request.URL)},}crawlerOptions, err := types.NewCrawlerOptions(options)if err != nil {gologger.Fatal().Msg(err.Error())}defer crawlerOptions.Close()crawler, err := standard.New(crawlerOptions)if err != nil {gologger.Fatal().Msg(err.Error())}defer crawler.Close()var input = "https://www.hackerone.com"err = crawler.Crawl(input)if err != nil {gologger.Warning().Msgf("Could not crawl %s: %s", input, err.Error())}
}
总结
Katana 是一个功能强大且易于使用的网页爬虫工具,适用于各种数据采集和网站监控任务。其高效的性能和先进的无头浏览技术使其成为处理动态网站内容的理想选择。无论是安全研究人员、数据分析师还是网站管理员,都可以通过 Katana 来实现他们的数据采集需求。
项目地址
https://github.com/projectdiscovery/katana
一个使用 Golang 编写的新一代网络爬虫框架,支持JS动态内容爬取 - BTool博客 - 在线工具软件,为开发者提供方便
相关文章:
一个使用 Golang 编写的新一代网络爬虫框架,支持JS动态内容爬取
大家好,今天给大家分享一个由ProjectDiscovery组织开发的开源“下一代爬虫框架”Katana,旨在提供高效、灵活且功能丰富的网络爬取体验,适用于各种自动化管道和数据收集任务。 项目介绍 Katana 是 ProjectDiscovery 精心打造的命令行界面&…...
深入探讨 Vue.js 的动态组件渲染与性能优化
Vue.js 作为一款前端领域中备受欢迎的渐进式框架,以其简单优雅的 API 和灵活性受到开发者的喜爱。在开发复杂应用时,动态组件渲染是一项极其重要的技术,它能够在页面中动态地加载或切换组件,从而显著提升应用的灵活性与用户体验。…...
vulnhub靶场【IA系列】之Tornado
前言 靶机:IA-Tornado,IP地址为192.168.10.11 攻击:kali,IP地址为192.168.10.2 都采用虚拟机,网卡为桥接模式 本文所用靶场、kali镜像以及相关工具,我放置在网盘中,可以复制后面链接查看 htt…...
简要认识JAVAWeb技术三剑客:HTMLCSSJavaScript
目录 一、web标准二、什么是HTML三、什么是CSS四、什么是JavaScript 黑马JAVAWeb飞书在线讲义地址: https://heuqqdmbyk.feishu.cn/wiki/LYVswfK4eigRIhkW0pvcqgH9nWd 一、web标准 Web标准也称网页标准,由一系列的标准组成,大部分由W3C&…...
C# 修改项目类型 应用程序程序改类库
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
卡通风格渲染
1、卡通风格渲染是什么 卡通风格渲染(Cartoon Shading),也称为非真实感渲染(NPR)或卡通渲染(Toon Shading) 主要目的是使3D模型看起来更像手绘的二维卡通或漫画风格,而不是逼真写实…...
ubuntu各分区的用途
在 Ubuntu 中,分区是将硬盘划分为多个逻辑部分的过程,每个分区可以用于不同的用途。合理分区可以提高系统性能、数据安全性和管理效率。以下是 Ubuntu 中常见分区及其用途的详细说明: 1. 根分区 (/) 用途:存放操作系统核心文件、…...
理解STC15F2K60S2单片机的最小电路
一、STC15F2K60S2与51单片机的区别 STC15F2K60S2和51单片机虽然都基于8051内核,但在多个方面存在显著区别: 1. CPU性能: - STC15F2K60S2:采用增强型8051 CPU,1T单时钟/机器周期,速度比普通8051快8-12倍…...
Docker官网安装
1.官网 官方文档 https://www.docker.com/ Docker Hub官网 镜像 https://hub.docker.com/ 2.Docker 的三要素 1、镜像 2、容器 3、仓库 小总结 3.Docker 平台架构图 (架构版本) 4.安装Docker CentOS | Docker Docs 1.确定你是CentOS7及以上版本 …...
成功案例分享 — 芯科科技助力涂鸦智能打造Matter over Thread模块,简化Matter设备开发
芯科科技(Silicon Labs)的愿景之一是让开发者每天都能够更轻松地开发无线物联网(IoT)。特别是在拥有相同愿景的合作伙伴的帮助下,我们每天都在取得进步。但是要想弥合知识水平和物联网开发之间的差距仍会面临一定的挑战…...
基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用-以ENSO预测为例讲解
1. 背景与目标 ENSO(El Nio-Southern Oscillation)是全球气候系统中最显著的年际变率现象之一,对全球气候、农业、渔业等有着深远的影响。准确预测ENSO事件的发生和发展对于减灾防灾具有重要意义。近年来,深度学习技术在气象领域…...
【Rust自学】12.6. 使用TDD(测试驱动开发)开发库功能
12.6.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print),是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步: 接收命令行参数读取…...
贪心算法汇总
1.贪心算法 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 如何能看出局部最优是否能推出整体最优 靠自己手动模拟,如果模拟可行,就可以试一试贪心策略,如果不可行,可能需要动态规划。 如何验证可不可以…...
H266/VVC 帧内预测中 ISP 技术
帧内子划分 ISP ISP 技术是在 JVET-2002-v3 提案中详细介绍其原理,在 VTM8 中完整展示算法。ISP是线基内预测(LIP)模式的更新版本,它改善了原始方法在编码增益和复杂度之间的权衡,ISP 算法的核心原理就是利用较近的像…...
PyTorch 中的 Dropout 解析
文章目录 一、Dropout 的核心作用数值示例:置零与缩放**训练阶段****推理阶段** 二、Dropout 的最佳使用位置与具体实例解析1. 放在全连接层后2. 卷积层后的使用考量3. BatchNorm 层与 Dropout 的关系4. Transformer 中的 Dropout 应用 三、如何确定 Dropout 的位置…...
集中式架构vs分布式架构
一、集中式架构 如何准确理解集中式架构 1. 集中式架构的定义 集中式架构是一种将系统的所有计算、存储、数据处理和控制逻辑集中在一个或少数几个节点上运行的架构模式。这些中央节点(服务器或主机)作为系统的核心,负责处理所有用户请求和…...
微服务主流框架和基础设施介绍
概述 微服务架构的落地需要解决服务治理问题,而服务治理依赖良好的底层方案。当前,微服务的底层方案总的来说可以分为两 种:微服务SDK (微服务框架)和服务网格。 微服务框架运行原理: 应用程序通过接入 SD…...
4.5.1 顺序查找、折半查找(二分查找)
文章目录 基本概念顺序查找折半查找(二分查找)索引顺序查找 基本概念 查找表:由同类元素构成的集合。 查找表按照是否可以修改数据表,可分为静态查找表、动态查找表。 静态查找表:不能修改数据表,可进行查询…...
DDD - 微服务设计与领域驱动设计实战(上)_统一建模语言及事件风暴会议
文章目录 Pre概述业务流程需求分析的困境统一语言建模事件风暴会议什么是事件风暴(Event Storming)事件风暴会议 总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对…...
基于Piquasso的光量子计算机的模拟与编程
一、引言 在科技飞速发展的当下,量子计算作为前沿领域,正以前所未有的态势蓬勃崛起。它凭借独特的量子力学原理,为解决诸多经典计算难以攻克的复杂问题提供了全新路径。从优化物流配送网络,以实现资源高效调配,到药物分子结构的精准模拟,加速新药研发进程;从金融风险的…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
