基于golang爬虫框架gathertool快速编写并发抓取国内ip信息

mange · · 1771 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

@[TOC](基于golang爬虫框架gathertool快速编写并发抓取国内ip信息) > gathertool - 框架地址: https://github.com/mangenotwork/gathertool - 框架下载: go get github.com/mangenotwork/gathertool - 介绍: 轻量级爬虫,接口测试,压力测试框架, 提高开发对应场景的golang程序。 - 框架文档: https://380949.baklib-free.com/ > 直接上code ```golang package main import ( "log" "net/http" "time" "github.com/PuerkitoBio/goquery" gt "github.com/mangenotwork/gathertool" ) var queue = gt.NewQueue() //全局声明抓取任务队列 func main(){ // 1.在页面 http://ip.bczs.net/country/CN 获取所以ip c, err := gt.Get("http://ip.bczs.net/country/CN",gt.SucceedFunc(IPListSucceed)) if err != nil{ log.Println(err) return } c.Do() //执行请求 // 2. 并发抓取详情数据 gt.StartJobGet(100,queue, gt.SucceedFunc(GetIPSucceed),//请求成功后执行的方法 gt.RetryFunc(GetIPRetry),//遇到 502,403 等状态码重试前执行的方法,一般为添加休眠时间或更换代理 gt.FailedFunc(GetIPFailed),//请求失败后执行的方法 ) } // 请求成功执行 func IPListSucceed(cxt *gt.Context){ html := string(cxt.RespBody) dom,err := gt.NewGoquery(html) if err != nil{ log.Println(err) return } result := dom.Find("div[id=result] tbody") result.Find("tr").Each(func(i int, tr *goquery.Selection){ td := tr.Find("td") startIp := td.Eq(0).Text()// IP起始 endIP := td.Eq(1).Text()// 结束ip number := td.Eq(2).Text()// ip数量 // 创建队列 抓取详情信息 queue.Add(&gt.Task{ Url: "http://ip.bczs.net/"+startIp, Data: map[string]interface{}{ "start_ip":startIp, "end_ip":endIP, "number":number, }, }) }) } // 获取详情信息成功的处理 func GetIPSucceed(c *gt.Context){ html := string(c.RespBody) dom,err := gt.NewGoquery(html) if err != nil{ log.Println(err) return } result,err := dom.Find("div[id=result] .well").Html() if err != nil{ log.Println(err) } log.Println(c.Task.Data, result) } // 获取详情信息重试的处理 func GetIPRetry(c *gt.Context){ //更换代理 c.Client = &http.Client{ //Transport: &http.Transport{ // Proxy: http.ProxyURL(uri), //}, Timeout: 5*time.Second, } time.Sleep(1*time.Second) } // 获取详情信息失败执行 func GetIPFailed(c *gt.Context){ queue.Add(c.Task)//请求失败归还到队列 } ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210426200445987.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01hbl9nZQ==,size_16,color_FFFFFF,t_70#pic_center) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210426200457302.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01hbl9nZQ==,size_16,color_FFFFFF,t_70#pic_center)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1771 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传