/gocrawler

golang实现单任务版爬虫和并发爬虫

Primary LanguageGo

gocrawler

之前学习了一段时间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 变量名补全