gathertool是基于golang的爬虫框架和接口&压力测试框架,目的是为了提高对应场景的开发效率。
项目地址
https://github.com/mangenotwork/gathertool
在线开发文档
http://mange.work/doc?id=1
pkg.go.dev
https://pkg.go.dev/github.com/mangenotwork/gathertool
gathertool
轻量级爬虫,接口测试,压力测试框架, 提高开发对应场景的golang程序的效率。
文档: 点击开始
开始使用
go get github.com/mangenotwork/gathertool
简单的get请求
import gt "github.com/mangenotwork/gathertool"
func main(){
ctx, err := gt.Get("https://www.baidu.com")
if err != nil {
log.Println(err)
}
log.Println(ctx.RespBodyString)
}
含请求事件请求
import gt "github.com/mangenotwork/gathertool"
func main(){
gt.NewGet(`http://192.168.0.1`).SetStartFunc(func(ctx *gt.Context){
log.Println("请求前: 添加代理等等操作")
ctx.Client.Transport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}
}
).SetSucceedFunc(func(ctx *gt.Context){
log.Println("请求成功: 处理数据或存储等等")
log.Println(ctx.RespBodyString())
}
).SetFailedFunc(func(ctx *gt.Context){
log.Println("请求失败: 记录失败等等")
log.Println(ctx.Err)
}
).SetRetryFunc(func(ctx *gt.Context){
log.Println("请求重试: 更换代理或添加等待时间等等")
ctx.Client.Transport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}
}
).SetEndFunc(func(ctx *gt.Context){
log.Println("请求结束: 记录结束,处理数据等等")
log.Println(ctx)
}
).Do()
}
事件方法复用
func main(){
gt.NewGet(`http://192.168.0.1`).SetSucceedFunc(succeed).SetFailedFunc(failed).SetRetryFunc(retry).Do()
gt.NewGet(`http://www.baidu.com`).SetSucceedFunc(baiduSucceed).SetFailedFunc(failed).SetRetryFunc(retry).Do()
}
// 请求成功: 处理数据或存储等等
func succeed(ctx *gt.Context){
log.Println(ctx.RespBodyString())
}
// 请求失败: 记录失败等等
func failed(ctx *gt.Context){
log.Println(ctx.Err)
}
// 请求重试: 更换代理或添加等待时间等等
func retry(ctx *gt.Context){
ctx.Client.Transport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}
}
// 百度请求成功后
func baiduSucceed(ctx *gt.Context){
log.Println(ctx.RespBodyString())
}
post请求
// FormData
postData := gt.FormData{
"aa":"aa",
}
// header
header := gt.NewHeader(map[string]string{
"Accept":"*/*",
"X-MicrosoftAjax":"Delta=true",
"Accept-Encoding":"gzip, deflate",
"XMLHttpRequest":"XMLHttpRequest",
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
})
// cookie
cookie := gt.Cookie{
"aa":"a"
}
// 随机休眠 2~6秒
sleep := gt.SetSleep(2,6)
c := gt.NewPostForm(caseUrl, postData, header, cookie, sleep)
c.Do()
html := c.RespBodyString()
log.Print(html)
数据存储到mysql
var (
host = "192.168.0.100"
port = 3306
user = "root"
password = "root123"
dbName = "dbName"
db,_ = gt.NewMysql(host, port, user, password, dbName)
)
//.... 执行抓取
data1 := "data1"
data2 := "data2"
inputdata := map[string]interface{} {
"data1" : data1,
"data2" : data2,
}
tableName := "data"
db.Spider2022DB.InsertAt(tableName, inputdata)
更多方法见 文档