【毕设扫描器】【动态爬虫】CrawlerGo源码分析1:主文件cli库的使用

2024-01-19 08:18

本文主要是介绍【毕设扫描器】【动态爬虫】CrawlerGo源码分析1:主文件cli库的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 配置运行参数
    • main函数重要代码:cli结构
        • 介绍和简单使用
    • 结合源码分析
        • cli 库的定义:75-258行(大体完成阅读)

配置运行参数

入口文件:根据项目提供的编译命令找到入口文件 crawlergo_cmd.go

入口函数:找到65行的 func main()函数,在主函数的代码中下断点。

配置:添加程序实参

(chrome程序路径必须加引号,否则会报错:navigate timeout http://127.0.0.1/upload-labs-master/)

(取消了参数-o json,这样就不会在命令行/控制台、打印比较混乱的Json结果数据)

-c "C:\Program Files\Google\Chrome\Application\chrome.exe" --output-json debug.json http://127.0.0.1/upload-labs-master/

验证配置是否正确:运行程序,发现程序退出。经过验证,在配置中为Chrome路径添加引号,成功执行程序。

生成编译程序 go_build_crawlergo_cmd_go.exe、以及爬虫结果文件 debug.json

main函数重要代码:cli结构

介绍和简单使用

参考:Go 每日一库之 cli

介绍:cli是一个用于构建命令行程序的库,所有的初始化操作就是创建一个cli.App结构的对象。通过为对象的字段赋值来添加相应的功能。

示例:理论上创建一个 cli.App 结构的对象,然后调用其 Run() 方法,传入命令行的参数即可。空白的cli程序如下:

func main(){(&cli.App{}).Run(os.Args)
}

说明文档:https://github.com/urfave/cli/。官方一个完整示例,分析过程见代码注释部分。

func main(){// 定义 cli.App{} 作为应用app := &cli.App{Name: "",				// 工具名称,会显示在帮助中Usage: "",			// 工具参数,会显示在帮助中// 接收命令行参数,开始执行定义的动作Action: func(c *cli.Context) error {},	}// 调用 cli.App{}.Run() 执行动作,动作接收命令行参数作为形参// 动作执行结果赋值给err变量,用于判断执行是否出错err := app.Run(os.Args)// 如果出错则打印错误信息if err != nil {log.Fatal(err)}
}
cli库小结应用说明
内置字典对象1 cli.App{}cli库的信息对象定义横幅、主要执行方法
内置键.Run(os.Args)接收命令行参数,执行Action键值中的方法
自定义键help打印信息
内置键字典 FlagsFlags字段是[]cli.Flag类型,用于添加选项
选项cli为常见类型都实现了对应的XxxFlag共用字段有:Name/Value/Usage
选项选项是通过c.Type(name)来获取的例如 if c.String(“lang”) == “english”
存入变量将选项存到某个预先定义好的变量中只需要设置Destination字段为变量的地址
选项的必要性声明Required: true,
---
内置对象2 cli.Context()可以获取传给命令行的参数信息-
-NArg()返回参数个数-
-Args()返回cli.Args对象调用其Get(i)获取位置i上的参数

结合源码分析

cli 库的定义:75-258行(大体完成阅读)
func main() {// cli 代码的漏网之鱼:72-74行// 定义 cli.App{}:75-252行app := &cli.App{声明帮助文本声明选项1 Chrome.exe 路径 {Aliases:     []string{"c"},				// 命令行输入参数的别名,例如-c chromePathDestination: &taskConfig.ChromiumPath	// 可以事先存入变量声明选项2 User-Agent 字段声明选项3 Post 数据 {Aliases:     []string{"d"},				// 输入参数的别名, -d a=1&b=2Destination: &taskConfig.MaxCrawlCount,	// 也可以事先存入声明选项4 过滤器模式 {Aliases:     []string{"f"},Usage:       "filtering `Mode` used for collected requests. Allowed mode:\"simple\", \"smart\" or \"strict\".",声明选项5 输出数据位置声明选项6 输出文件格式声明选项7 以隐匿形式启动浏览器声明选项8 最大线程Name:        "max-tab-count",Aliases:     []string{"t"},Value:       8,Usage:       "maximum `Number` of tabs allowed.",声明选项9 使用一般路径对目标进行Fuzz测试声明选项10 路径Fuzz字典Name:        "fuzz-path-dict",Usage:       "`Path` of fuzz dict. Such as \"/home/test/fuzz_path.txt\"",声明选项11 是否从 robots.txt 寻找路径声明选项12 请求代理声明选项13 是否对url进行编码声明选项14 单线程的超时时间……Action: runerr := app.Run(os.Args)if err != nil {logger.Logger.Fatal(err)}}
}

这篇关于【毕设扫描器】【动态爬虫】CrawlerGo源码分析1:主文件cli库的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/621796

相关文章

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安