当前位置: 首页 > 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的光量子计算机的模拟与编程

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

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...