之前学习了一段时间go之后想写一点小的项目,上网查询了一些资料,做了一些小的demo,今天将我最近写的小项目分享给大家:利用go实现单任务版爬虫和并发爬虫,因为go对并发支持的很好,所以我们只需要提前将goroutine和channl学好,就很好理解了
项目结构:
1.带有简单的日志收集,打印的日志写到/logs目录下,可配置写到文件中还是输出到控制台,或者都输出
2.简单的正则匹配,上下文控制超时,chan控制并发数量,goroutine并发下载等知识点
3.简单的乱码处理,简单的随机数处理,图片下载,图片名称替换等
项目难度 ?
-
regexp api:
re := regexp.MustCompile(reStr) : reStr代表正则表达式 ,这个方法表示按照这个正则去匹配 re.FindAllStringSubmatch(srcStr,-1) : -1表示所有全查到 (1或2或3表示取1个2个3个)
-
一些常用的正则符号
() : 标识分组 \w : 字母数字下划线 \d : 数字 \D :字母 \s\S : 任意字符 \s : 空白字符(小写s) \S : 非空白字符(大写S) re1 | re2 : re1 或 re2 所表示的片段 regexp*+? | regexp+? 分别表示1到多次 | 或0到多次 ?表示非贪婪,也就是匹配到?后面的东西为止 {n,m} | {n,} 表示 n个到m个 | 或至少是n个 [\w\.] 表示出现任意字母数字下划线或者 . 都是ok的
-
举例:
[\s\S]+?href 这段正则中: [\s\S] 表示任意字符 + 表示 0个或1个 ?表示不会隔过 href
-
正则案例
这里以电话号为案例 rePhone = `(1[3456789]\d)(\d.[a-z]{2,3})(\d{4})` 匹配出是二维数组形式分四组,整体为第一组,有一个括号加1组
-
快捷键
Alt + Shift + M 变为函数形式 Ctrl + Alt + L 格式化代码 Ctrl + Alt + V 变量名补全