gathertool
gathertool是golang脚本化开发库,目的是提高对应场景程序开发的效率;轻量级爬虫库,接口测试&压力测试库,DB操作库等。
地址: https://github.com/mangenotwork/gathertool
下载: go get github.com/mangenotwork/gathertool
库文档: https://pkg.go.dev/github.com/mangenotwork/gathertool



代码位置:
https://github.com/mangenotwork/gathertool/tree/main/_examples/cnlinfo
package mainimport (gt "github.com/mangenotwork/gathertool"
)// 行业信息网 : http://www.cnlinfo.net/func init() {// 读取配置err := gt.NewConf("conf.yaml")if err != nil {panic(err)}
}// Rse 抓取结果保存的数据结构
type Rse struct {Broad string `json:"broad"`Fenlei []string `json:"fenlei"`
}var (rse = make([]*Rse, 0)
)// 获取行业分类
func main() {caseUrl := "http://www.cnlinfo.net/allgongsifenlei/yiqiyibiao.htm"ctx, _ := gt.Get(caseUrl)hangyeList, err := gt.GetPointClassHTML(ctx.Html, "ul", "hangye-list")if err != nil {gt.Error("没有获取到 ul class = hangye-list")return}hangyeHtml := ""if len(hangyeList) > 0 {hangyeHtml = hangyeList[0]}// 获取并便利分类大类for _, li := range gt.RegHtmlA(hangyeHtml) {broad := gt.RegHtmlATxt(li)[0]href := gt.RegHtmlHrefTxt(li)[0]// 抓取小类getClassify2(broad, href)}// 保存并输出到json文件err = gt.OutJsonFile(rse, gt.Config.GetStr("out_file"))if err != nil {gt.Error(err)}
}// 获取小类
func getClassify2(broad, caseUrl string) {var (notData = 0reqDelayMax = gt.Config.GetInt("req_delay_max")reqDelayMin = gt.Config.GetInt("req_delay_min"))d := &Rse{Broad: broad,Fenlei: make([]string, 0),}gt.Infof("抓取大类 %v : %v", broad, caseUrl)ctx, _ := gt.Get(caseUrl, gt.SetSleep(reqDelayMin, reqDelayMax))hangyeContent, err := gt.GetPointClassHTML(ctx.Html, "ul", "hangye-fenlei-content")if err != nil {gt.Error("没有获取到 ul class = hangye-fenlei-content")notData++}for _, ul := range hangyeContent {for _, a := range gt.RegHtmlATxt(ul) {d.Fenlei = append(d.Fenlei, a)}}// 第二种样式hangyeContent1, err := gt.GetPointClassHTML(ctx.Html, "ul", "fenlei_list1")if err != nil {gt.Error("没有获取到 ul class = fenlei_list1")notData++}for _, ul := range hangyeContent1 {for _, a := range gt.RegHtmlATxt(ul) {d.Fenlei = append(d.Fenlei, a)}}rse = append(rse, d)if notData == 2 {panic("该页面没有数据")}
}
配置文件 conf.yaml
# 抓取结果输出文件
out_file: "fenlei.json"
# 请求延时
req_delay_min : 1
req_delay_max : 3
抓取输出: fenlei.json
使用gathertool能很规范化抓取程序的编写,提供配置,请求,提取,保存;
特别是提取,使用 gt.GetPointClassHTML 快速定位到数据Dom范围,再使用gt.RegHtmlATxt获取到具体数据;
gathertool还有很多很多的方法值得去探索和学习;
使用gathertool编写抓取程序大大提升了效率,该程序用时不到5分钟便编写完成并成功编译执行和抓取到最终结果;