当前位置: 首页 > 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博客 - 在线工具软件,为开发者提供方便

http://www.lryc.cn/news/520960.html

相关文章:

  • 深入探讨 Vue.js 的动态组件渲染与性能优化
  • vulnhub靶场【IA系列】之Tornado
  • 简要认识JAVAWeb技术三剑客:HTMLCSSJavaScript
  • C# 修改项目类型 应用程序程序改类库
  • 卡通风格渲染
  • ubuntu各分区的用途
  • 理解STC15F2K60S2单片机的最小电路
  • Docker官网安装
  • 成功案例分享 — 芯科科技助力涂鸦智能打造Matter over Thread模块,简化Matter设备开发
  • 基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用-以ENSO预测为例讲解
  • 【Rust自学】12.6. 使用TDD(测试驱动开发)开发库功能
  • 贪心算法汇总
  • H266/VVC 帧内预测中 ISP 技术
  • PyTorch 中的 Dropout 解析
  • 集中式架构vs分布式架构
  • 微服务主流框架和基础设施介绍
  • 4.5.1 顺序查找、折半查找(二分查找)
  • DDD - 微服务设计与领域驱动设计实战(上)_统一建模语言及事件风暴会议
  • 基于Piquasso的光量子计算机的模拟与编程
  • 44_Lua迭代器
  • 相机SD卡照片数据不小心全部删除了怎么办?有什么方法恢复吗?
  • RAG 测评基线
  • 麒麟系统设置tomcat开机自启动
  • java 学习笔记 第二阶段:Java进阶
  • 机组存储系统
  • 【基础工程搭建】内存访问异常问题分析
  • Mysql 和 navicat 的使用
  • 计算机网络(五)运输层
  • 托宾效应和托宾q理论。简单解释
  • 大数据原生集群 (Hadoop3.X为核心) 本地测试环境搭建二