28

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

 4 years ago
source link: https://www.tuicool.com/articles/6FNzyae
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

​大家好,我是杨小爽。

先提一个问题,不用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语法层面上支持并发,语言设计者真正考虑到了如何合理利用多核处理器来提高效率,感兴趣的话就请不要错过。

uIza6fZ.jpg!web

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK