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

15 篇文章 0 订阅
10 篇文章 2 订阅

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

gathertool

  • 框架地址: https://github.com/mangenotwork/gathertool
  • 框架下载: go get github.com/mangenotwork/gathertool
  • 介绍: 轻量级爬虫,接口测试,压力测试框架, 提高开发对应场景的golang程序。
  • 框架文档: https://380949.baklib-free.com/

直接上code

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)//请求失败归还到队列
}

在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值