上周从零学习了golang,语法简单关键字少,写个爬虫熟悉一下语法结构。
首先选用了原生的net/http包,基本上涵盖了所有的get/post请求,各种参数都可以设置,网上google到html页面解析goquery神器,很轻松就可以解决页面解析问题。
首先就写了个爬取汇率的爬虫。然后重写之前php的一个请求类,请求类的逻辑有点混乱不清晰,往往把两个不同的功能合并到一起写,粒度大,后来发现了一个好用的框架——colly,之后再试试好不好用
一.开发环境
Windows 10 Golang
依赖包:goquery
二.goquery官方文档/方法
较常用的方法有Find和Each
// goquery暴露的对象种类
*goquery.Document// goquery doc对象
*Selection// goquery选择器
*Matcher// 匹配器
func(s*Selection)Find(selectorstring)*Selection// Find函数原型,可以进行链式调用
func(s*Selection)Each(ffunc(int,*Selection))*Selection// Each方法
三.实例
爬取中国银行的汇率牌价表,golang依赖net/http包和goquery包
唯一的难点是对于goquery方法的使用,需要阅读官方文档:
https://godoc.org/github.com/PuerkitoBio/goquery
使用原生的net/http包基本上可以解决大多数的网页请求,使用goquery可以解决页面解析问题
四.改进
可以利用golang的协程特性进行异步多协程爬取
a.增加安全性
增加安全性可以通过几个方面进行改进:
1.首先可以限制爬虫的爬取速度
2.每次对网页的请求都随机选用一个客户端
3.选用IP代理池,防止IP误封(及限制ip访问次数)
构造请求代理ip网站的链接→获取网页内容→ 提取网页中IP地址和端口号→验证IP的有效性并存储
五.相关
HTTP请求中的Form Data和Request Payload的区别
六.参考文档
https://zhuanlan.zhihu.com/p/32825491
https://blog.csdn.net/yang731227/article/details/83900422
net/http:https://studygolang.com/articles/9467
七.框架
1.gocolly/colly
特点:事件监听,通过callback执行事件处理
2.gospider
基于colly开发的web管理界面