爬虫基础|爬虫语言的新选择?

​大家好,我是杨小爽。

先提一个问题,不用Python写爬虫,我们还可以用什么写?

答案:编程语言很多,选择也很多,我的答案是GO。

一、Go简要介绍

1、Go,又称Golang,是Google推出的一门开源编程语言,它是一种静态强类型、编译型、并发型编程语言。由Robert Griesemer、Rob Pike和Ken Thompson三人在2007年9月开始设计,于2009年11月正式开源,2012年1月推出稳定版本。

2、Go在语言层面上支持并发,使用关键字go来实现并发操作。

3、Go的标准库及其丰富,go语言中文社区针对标准库也提供了良好的中文翻译。

4、Go内置了十分强大的工具:go fmt,能帮助代码统一规范,提高代码的可读性。

5、Go IDE推荐:LiteIDE,VSCode,Eclipse插件GoClipse,Goland。

二、Go语法介绍

1、基本概念

1.1、打印Hello World!

packagemain​import(“fmt”)​funcmain(){fmt.Println(“Hello World!”)}

1.2、关键字:Go关键字较少,只有25个

breakdefaultfuncinterfaceselectcase    defer        go      map        structchanelsegotopackageswitchconstfallthroughifrange      typecontinueforimportreturnvar

1.3、注释

// 单行注释/*….多行注释….*/

1.4、程序基础结构讲解

package// 声明程序所属包import   // 导入程序依赖包const    // 常量定义var      // 变量定义type goIntint// 一般类型声明(用户自定义类型)type LearnGo struct {}  // 结构体声明type LearnGo interface{}  // 声明接口func learnGo(){}  // 函数定义

1.5、package的用法

①Go中的package是最基本的分发单位和工程管理中依赖关系的体现。②每个go文件开头必须要有package来声明go文件所属的源码包。③要生成Go语言可执行程序,必须是有命名main的go文件,且该文件内必须有main函数。④同一路径下只能有一个package,当然一个package可以由多个go文件组成。

1.6、import用法

①在main文件中导入其他包时,包将按顺序导入;②如果导入的某个包依赖其他包(如B包),会首先去导入B包,即会先初始化B包中的变量常量,如果有init函数,会自动执行init;③所有包导入完毕后,才会对main中常量变量进行初始化,然后执行init函数(如果存在),最后执行main函数;④如果一个包被导入多次,则该包只会导入一次。⑤import别名:导入的包名前输入下划线(_),是为了注册包里的引擎,让外部可以使用

1.7、数据类型

无符号整型:uint8,uint16,uint32,uint64有符号整型:int8,int16,int32,int64浮点型和复数:float32,float64,complex64,complex128布尔型:bool(true,false)字符串类型:string派生类型:指针类型(Pointer),数组类型,结构类型(struct),Channel类型(chan),函数类型(func),切片类型(slice),接口类型(interface),Map类型(map)​类型零值:不是空值,指某个变量被声明后的默认值,值类型默认为0,布尔型默认为false,string默认为空字符串。

2、常用语法(一)

2.1、变量

变量,有一点编程基础的同学容易理解,没有的建议自己百度。

变量的声明:var [变量类型]变量的赋值: =声明与赋值同时进行:var[变量类型] =分组声明:var (            i int            j float32            name string         )同一个行声明多个变量:var a,b,c int = 123  或 a,b := 1,2注意:全局变量声明必须使用var关键字,局部变量则可省略变量可见性规则:大写字母开头的变量是可导出的,是公用变量,其他包来读取;              小写字母开头的变量不可导出,为包中私有变量

2.2、常量定义

定义方式:显式 const  identifier  [type]  =  value

隐式 const  identifier  =  value(也叫无类型常量)

支持范围:布尔型、数值型和字符串型

3、常用语法(二)

3.1、算术运算符

+ 加  – 减  * 乘  / 除++ 自加一  — 自减一

3.2、关系运算符

== 相等        != 不等> 大于         = 大于等于    <= 小于等于

3.3、逻辑运算符

&& 与(同真则真)||或(一真则真)!  非(反转)

3.4、赋值运算符

= 表达式的值赋值给左边的变量+= 相加后赋值-= 想减后赋值*= 相乘后赋值/= 相除后赋值

4、常用语法(三)

4.1、条件语句if-else

// a的值大于0则打印出“a大于0”funcmain(){a:=1if a >0{        fmt.Print(“a大于0”)    }}// a的值小于0则打印出“a小于0”funcmain(){a:= -1if a <0{        fmt.Print("a小于0")}else{        fmt.Print("a大于0")    }}

4.2、选择语句switch

select通常结合channel使用。

// 根据switch后的值打印出“结果为3”funcmain() {switch3{case1:fmt.Print(“结果为1”)case2:fmt.Print(“结果为2”)case3:fmt.Print(“结果为3”)    }}

4.3、循环语句for

// 语法for(init; condition; increment) {    conditional code}// 死循环打印“我喜欢go语言”func main() {for{fmt.Println(“我喜欢go语言”)time.Sleep(1*time.Second)    }}// 循环从切片中读取值,并打印func main() {a:= []string{“香蕉”,”苹果”,”雪梨”}forkey,value:= range a {fmt.Println(“key的值为:”)        fmt.Println(key)fmt.Println(“value的值为:”)        fmt.Println(value)    }}

4.4、控制语句goto,break,continue

// goto 跳到某代码块// break 退出循环// continue 跳过本次循环后续内容,继续下一次循环// 打印出”代码块一“func main() {    goto onefmt.Println(“中间代码块”)    one:fmt.Println(“代码块一”)}

三、结尾语

关于go语言的介绍就到这里,笔记比较零碎,仅起快速复习作用。如果你对go语言感兴趣,可以去学习慕课网的《Go语言语法入门篇》,或者喜欢看书的朋友也可以看看《Go语言实战》。用go语言来编写爬虫无疑是十分简便,且效率强大,go语法层面上支持并发,语言设计者真正考虑到了如何合理利用多核处理器来提高效率,感兴趣的话就请不要错过。

最后,谢谢大家观看,欢迎关注我的公众号“探索数据之路”。