golang爬虫练习-抓取行业信息分类

news2024/11/28 2:43:50

抓取框架介绍

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 main

import (
	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     = 0
		reqDelayMax = 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分钟便编写完成并成功编译执行和抓取到最终结果;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

醛肽:Gly-Phe-Gly-aldehyde、102579-48-6

可逆组织蛋白酶 B 抑制剂 GFG-醛缩氨基脲已用于通过亲和层析从日本血吸虫中纯化组织蛋白酶 B 样蛋白酶 Sj31,并用于从疟原虫物种中分离恶性疟原虫。编号: 200138 中文名称: 三肽Gly-Phe-Gly-aldehyde CAS号: 102579-48-6 单字母: H2N-GFG-CHO 三字母: H2N-Gly-Phe-G…

Docker网络管理

目录 一、Docker 网络实现原理 二、Docker 的网络模式 1.四种网络模式 2.各网络模式详解 (1)Host模式 (2)Container模式 (3)None模式 (4)Bridge模式 3.指定容器网络…

常用的实体类转换方式 - BeanUtil | MapStruct

0. 相关依赖:1. 实体类信息:2. BeanUtil方法转换:2.1. 实体类转实体类(copyProperties):2.2. 实体类集合转实体类集合(copyToList):2.3. 实体类集合转Map(bea…

java泛型类型解释

文章目录1、Class<T>使用写法2、常见字母含义举例说明3、object.getClass()和Object.class的区别举例说明1、Class 使用写法 mongoTemplate.findAll(Customer.class); 2、常见字母含义 E - Element (在集合中使用&#xff0c;因为集合中存放的是元素) T - Type&#x…

css修改滚动条样式

有一说一 系统默认的滚动条确实不是很美观 那么我就来带着大家修改一下他的样式 ::-webkit-scrollbar 设置整个滚动条的样式 一般用于设置宽度 你要跟什么元素加 就 元素::-webkit-scrollbar 例如你想 给body 就 body::-webkit-scrollbar ::-webkit-scrollbar-track 设置滚…

一周活动速递|Paper Time第五期;技术征文大赛即将收官

今天周一&#xff0c;小编为大家准时带来 「OceanBase 一周活动速递」 &#xff0c;活动按时间排序&#xff0c;欢迎大家关注&#xff01; Paper Time&#xff1a;基于无服务计算的机器学习方法 01 基本安排 时间&#xff1a; 11 月 23 日&#xff08;周三&#xff09;19:00-2…

让我们进入面向对象的世界(二)

让我们进入面向对象的世界(二) 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录让我们进入面向对象的世界(二)前言二.对象的操作三.让我们离对象村更进一步&#xff0c;进入面向对象封装的特性四 实例变量和局部变量…

ヾ(⌐ ■_■)— HTML-Emmet语法速查表

Emmet是一款文本编辑器/IDE的插件&#xff0c;用来快速生成复杂的HTML代码&#xff0c;只要掌握一些常用的语法&#xff08;类似于CSS选择器&#xff09;&#xff0c;就可以减少重复编码的工作。 1.调用方法 Emmet使用Tab作为自动生成HTML代码的触发器。输入完生成HTML的缩写…

Qt-FFmpeg开发-视频播放(4)

Qt-FFmpeg开发-视频播放【软解码 OpenGL显示YUV420P图像】 文章目录Qt-FFmpeg开发-视频播放【软解码 OpenGL显示YUV420P图像】1、概述2、实现效果3、FFmpeg软解码流程4、主要代码4.1 解码代码4.2 OpenGL显示RGB图像代码5、完整源代码更多精彩内容&#x1f449;个人内容分类汇…

图片如何转换为文字?这些软件可以实现

最近有小伙伴私信说&#xff0c;因为临近期末&#xff0c;老师上课的进度开始加快。他为了兼顾知识点能够当堂吸收&#xff0c;所以没有记笔记&#xff0c;而是将知识点都拍照下来&#xff0c;集中注意力上课。然而当他课后打算整理笔记却发现&#xff0c;自己原来拍了几十张图…

比较研究测井预测:遗传算法与神经网络(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

day071:网络编程(IP、端口、协议)、InetAddress类、UDP协议、TCP协议

目录 一、网络编程 1.网络编程三要素 2.IP地址 &#xff08;1&#xff09;IP地址&#xff08;每台计算机指定的标识号&#xff09; &#xff08;2&#xff09;类InetAddress:方便对IP地址获取和操作&#xff1b;此类表示Internet&#xff08;IP&#xff09;地址 3.端口&am…

LVS+Keepalived高可用群集

目录 一、keepalived简介 二、keepalived工作原理 三、LVS-DR模式keepalived 高可用集群部署 1、部署2台web服务器 2、部署2台负载调度器 四、总结 一、keepalived简介 Keepalived是通过vrrp 协议的实现高可用性&#xff0c;对网络比较了解的IT人&#xff0c;对这个技术应…

[操作系统笔记]调度与死锁杂项知识点

部分定义截取自书本 管态和目态 这说的是处理机的执行状态 管态又称为特权态&#xff0c;系统态&#xff0c;核心态。CPU在管态下可以执行指令系统的全集。如果程序处于管态&#xff0c;则该程序可以访问计算机的任何资源&#xff0c;它的资源访问权限不受限制&#xff0c;通常…

iOS16 中的 3 种新字体宽度样式

前言 在 iOS 16 中&#xff0c;Apple 引入了三种新的宽度样式字体到 SF 字体库。 Compressed Condensed Expend UIFont.Width Apple 引入了新的结构体 UIFont.Width&#xff0c;这代表了一种新的宽度样式。 目前已有的四种样式。 standard&#xff1a;我们总是使用的默认…

centos安装nacos

一、安装JDK环境和MySQL环境 jdk环境安装:centos安装jdk1.8_java-zh的博客-CSDN博客 MySQL环境安装:centos安装mysql5.7_java-zh的博客-CSDN博客 二、拉取nacos项目 GitHub主页&#xff1a;https://github.com/alibaba/nacos GitHub的Release下载页&#xff1a;https://…

ClickHouse教程 — 第一章 ClickHouse单机版安装

ClickHouse教程 — 第一章 ClickHouse单机版安装1 版本区别1.1 clickhouse-client-21.1.9.41以上版本1.2 clickhouse-client-21.1.9.41以下版本2 clickhouse-client-21.1.9.41以上版本2.1 下载2.2 解压安装2.3 启动2.4 clickhouse相关目录2.5 允许远程访问3 clickhouse-client-…

应用地球物理+AI:智能地球勘探

《地球物理人工之智能和信息前沿技术学术报告会》 主讲人&#xff1a;陆文凯 1. 地球物理学 地球科学的主要学科之一&#xff0c;是通过定量的物理方法&#xff08;如&#xff1a;地震、重、磁、电、测井、地热和放射能等方法&#xff09;研究地球以及寻找地球内部矿藏资源的一…

TD集群内存占用过高

1 TD简介 TDengine 是一款开源、云原生的时序数据库&#xff0c;专为物联网、工业互联网、金融、IT运维监控等场景设计并优化。它能让大量设备、数据采集器每天产生的高达 TB 甚至 PB级的数据得到高效实时的处理&#xff0c;对业务的运行状态进行实时的监测、预警&#xff0c;从…

pyinstaller打包记录|| 打包成功,含xgboost打包遇到的问题

文章目录1 requirements.txt2 项目介绍3 matplotlib的问题4 xgboost打包遇到的问题4.1 解决办法&#xff1a;5 总结流程5.1 打开命令行5.2 键入打包指令5.3 执行文件5.4 双击exe运行1 requirements.txt python3.6.15tensorflow-cpu2.2.0 netCDF41.5.6 Keras2.3.1 pandas1.0.3 …