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

Posted 南瓜__pumpkin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了毕设扫描器动态爬虫CrawlerGo源码分析1:cli库的使用相关的知识,希望对你有一定的参考价值。

文章目录

配置运行参数

入口文件:根据项目提供的编译命令找到入口文件 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函数1: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.Appcli库的信息对象定义横幅、主要执行方法
内置键.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 chromePath
			Destination: &taskConfig.ChromiumPath	// 可以事先存入变量
		声明选项2 User-Agent 字段
		声明选项3 Post 数据 
			Aliases:     []string"d",				// 输入参数的别名, -d a=1&b=2
			Destination: &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: run
	
		err := app.Run(os.Args)
		if err != nil 
			logger.Logger.Fatal(err)
		
	


以上是关于毕设扫描器动态爬虫CrawlerGo源码分析1:cli库的使用的主要内容,如果未能解决你的问题,请参考以下文章

毕设扫描器动态爬虫CrawlerGo直观使用效果分析

毕设扫描器动态爬虫CrawlerGo直观使用效果分析

毕设扫描器参数Fuzz第二篇:动态爬虫的创建启动和协程池

毕设扫描器参数Fuzz数据的定义读取和装配(爬虫数据和Payload数据)

毕设扫描器参数Fuzz第一篇:数据的定义读取和装配(爬虫数据和Payload数据)

爬虫毕设:爬取动态网页