当前位置: 首页 > news >正文

一个使用 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动态内容爬取

大家好&#xff0c;今天给大家分享一个由ProjectDiscovery组织开发的开源“下一代爬虫框架”Katana&#xff0c;旨在提供高效、灵活且功能丰富的网络爬取体验&#xff0c;适用于各种自动化管道和数据收集任务。 项目介绍 Katana 是 ProjectDiscovery 精心打造的命令行界面&…...

深入探讨 Vue.js 的动态组件渲染与性能优化

Vue.js 作为一款前端领域中备受欢迎的渐进式框架&#xff0c;以其简单优雅的 API 和灵活性受到开发者的喜爱。在开发复杂应用时&#xff0c;动态组件渲染是一项极其重要的技术&#xff0c;它能够在页面中动态地加载或切换组件&#xff0c;从而显著提升应用的灵活性与用户体验。…...

vulnhub靶场【IA系列】之Tornado

前言 靶机&#xff1a;IA-Tornado&#xff0c;IP地址为192.168.10.11 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.2 都采用虚拟机&#xff0c;网卡为桥接模式 本文所用靶场、kali镜像以及相关工具&#xff0c;我放置在网盘中&#xff0c;可以复制后面链接查看 htt…...

简要认识JAVAWeb技术三剑客:HTMLCSSJavaScript

目录 一、web标准二、什么是HTML三、什么是CSS四、什么是JavaScript 黑马JAVAWeb飞书在线讲义地址&#xff1a; https://heuqqdmbyk.feishu.cn/wiki/LYVswfK4eigRIhkW0pvcqgH9nWd 一、web标准 Web标准也称网页标准&#xff0c;由一系列的标准组成&#xff0c;大部分由W3C&…...

C# 修改项目类型 应用程序程序改类库

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

卡通风格渲染

1、卡通风格渲染是什么 卡通风格渲染&#xff08;Cartoon Shading&#xff09;&#xff0c;也称为非真实感渲染&#xff08;NPR&#xff09;或卡通渲染&#xff08;Toon Shading&#xff09; 主要目的是使3D模型看起来更像手绘的二维卡通或漫画风格&#xff0c;而不是逼真写实…...

ubuntu各分区的用途

在 Ubuntu 中&#xff0c;分区是将硬盘划分为多个逻辑部分的过程&#xff0c;每个分区可以用于不同的用途。合理分区可以提高系统性能、数据安全性和管理效率。以下是 Ubuntu 中常见分区及其用途的详细说明&#xff1a; 1. 根分区 (/) 用途&#xff1a;存放操作系统核心文件、…...

理解STC15F2K60S2单片机的最小电路

一、STC15F2K60S2与51单片机的区别 STC15F2K60S2和51单片机虽然都基于8051内核&#xff0c;但在多个方面存在显著区别&#xff1a; 1. CPU性能&#xff1a; - STC15F2K60S2&#xff1a;采用增强型8051 CPU&#xff0c;1T单时钟/机器周期&#xff0c;速度比普通8051快8-12倍…...

Docker官网安装

1.官网 官方文档 https://www.docker.com/ Docker Hub官网 镜像 https://hub.docker.com/ 2.Docker 的三要素 1、镜像 2、容器 3、仓库 小总结 3.Docker 平台架构图 &#xff08;架构版本&#xff09; 4.安装Docker CentOS | Docker Docs 1.确定你是CentOS7及以上版本 …...

成功案例分享 — 芯科科技助力涂鸦智能打造Matter over Thread模块,简化Matter设备开发

芯科科技&#xff08;Silicon Labs&#xff09;的愿景之一是让开发者每天都能够更轻松地开发无线物联网&#xff08;IoT&#xff09;。特别是在拥有相同愿景的合作伙伴的帮助下&#xff0c;我们每天都在取得进步。但是要想弥合知识水平和物联网开发之间的差距仍会面临一定的挑战…...

基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用-以ENSO预测为例讲解

1. 背景与目标 ENSO&#xff08;El Nio-Southern Oscillation&#xff09;是全球气候系统中最显著的年际变率现象之一&#xff0c;对全球气候、农业、渔业等有着深远的影响。准确预测ENSO事件的发生和发展对于减灾防灾具有重要意义。近年来&#xff0c;深度学习技术在气象领域…...

【Rust自学】12.6. 使用TDD(测试驱动开发)开发库功能

12.6.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print)&#xff0c;是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步&#xff1a; 接收命令行参数读取…...

贪心算法汇总

1.贪心算法 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 如何能看出局部最优是否能推出整体最优 靠自己手动模拟&#xff0c;如果模拟可行&#xff0c;就可以试一试贪心策略&#xff0c;如果不可行&#xff0c;可能需要动态规划。 如何验证可不可以…...

H266/VVC 帧内预测中 ISP 技术

帧内子划分 ISP ISP 技术是在 JVET-2002-v3 提案中详细介绍其原理&#xff0c;在 VTM8 中完整展示算法。ISP是线基内预测&#xff08;LIP&#xff09;模式的更新版本&#xff0c;它改善了原始方法在编码增益和复杂度之间的权衡&#xff0c;ISP 算法的核心原理就是利用较近的像…...

PyTorch 中的 Dropout 解析

文章目录 一、Dropout 的核心作用数值示例&#xff1a;置零与缩放**训练阶段****推理阶段** 二、Dropout 的最佳使用位置与具体实例解析1. 放在全连接层后2. 卷积层后的使用考量3. BatchNorm 层与 Dropout 的关系4. Transformer 中的 Dropout 应用 三、如何确定 Dropout 的位置…...

集中式架构vs分布式架构

一、集中式架构 如何准确理解集中式架构 1. 集中式架构的定义 集中式架构是一种将系统的所有计算、存储、数据处理和控制逻辑集中在一个或少数几个节点上运行的架构模式。这些中央节点&#xff08;服务器或主机&#xff09;作为系统的核心&#xff0c;负责处理所有用户请求和…...

微服务主流框架和基础设施介绍

概述 微服务架构的落地需要解决服务治理问题&#xff0c;而服务治理依赖良好的底层方案。当前&#xff0c;微服务的底层方案总的来说可以分为两 种&#xff1a;微服务SDK &#xff08;微服务框架&#xff09;和服务网格。 微服务框架运行原理&#xff1a; 应用程序通过接入 SD…...

4.5.1 顺序查找、折半查找(二分查找)

文章目录 基本概念顺序查找折半查找&#xff08;二分查找&#xff09;索引顺序查找 基本概念 查找表&#xff1a;由同类元素构成的集合。 查找表按照是否可以修改数据表&#xff0c;可分为静态查找表、动态查找表。 静态查找表&#xff1a;不能修改数据表&#xff0c;可进行查询…...

DDD - 微服务设计与领域驱动设计实战(上)_统一建模语言及事件风暴会议

文章目录 Pre概述业务流程需求分析的困境统一语言建模事件风暴会议什么是事件风暴&#xff08;Event Storming&#xff09;事件风暴会议 总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对…...

基于Piquasso的光量子计算机的模拟与编程

一、引言 在科技飞速发展的当下,量子计算作为前沿领域,正以前所未有的态势蓬勃崛起。它凭借独特的量子力学原理,为解决诸多经典计算难以攻克的复杂问题提供了全新路径。从优化物流配送网络,以实现资源高效调配,到药物分子结构的精准模拟,加速新药研发进程;从金融风险的…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...

python读取SQLite表个并生成pdf文件

代码用于创建含50列的SQLite数据库并插入500行随机浮点数据&#xff0c;随后读取数据&#xff0c;通过ReportLab生成横向PDF表格&#xff0c;包含格式化&#xff08;两位小数&#xff09;及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...

【Java】Ajax 技术详解

文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...