[Golang] 爬虫实战-获取动态页面数据-获取校招信息

news/2024/7/19 9:09:49 标签: 爬虫, golang, ajax, go

😚一个不甘平凡的普通人,致力于为Golang社区和算法学习做出贡献,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘
🤗专栏:算法学习
🤗专栏:Go实战
💬个人主页:个人主页

请添加图片描述

跟着我一起来学习go爬虫吧!!!
文章介绍:爬取网站的招聘信息
方法:使用go自带的http包中的方法去爬取相应的数据
希望对您有所帮助,您的一键三连是我更新的动力!!!十分感谢

文章目录

  • 页面数据分析
  • 爬取动态页面
    • 判断类型
    • 抓包模拟请求头

页面数据分析

常见的页面分为:静态页面和动态页面
如何判断是什么类型的页面呢? 通过查看页面的源代码,如果和你通过f12查看的页面元素一致,那么就说明是静态页面。
如果是静态页面的话, 可以通过直接获取网页链接,然后根据自己想要的标签然后获取对应的数据,这一类比较简单一点。
什么情况下是动态抓取? 如果查看源代码之后,发现元素的组成和通过f12不一致,并且由很多ajax或者js或者css构成,那么就不能直接通过拿链接去获取对应的数据,因为这样我们无法获得所有想要的数据,只会获得一部分。
那我们应该怎样去做呢??

爬取动态页面

爬取动态页面的最常见的方法就是:通过抓包,获取对应的ajax文件,通过查看自己想要的json数据位置,锁定对应的文件,然后模拟请求头抓取,下面以抓取某站的校招信息为例子:

判断类型

查看源代码: 判断出如果直接抓取不会拿到数据
在这里插入图片描述
所以需要动态抓取

抓包模拟请求头

步骤一:

在这里插入图片描述
步骤二:

在这里插入图片描述
步骤三:

在这里插入图片描述

具体代码实现:
这一块几乎涵盖了http包中爬虫所有用法 哥们自己看吧,写的很清楚了

go">// 抓取职位信息,主要作用:抓取到页面的id,为之后的每一页信息爬取做铺垫
func Fetch(url string, Method string, requestBody []byte) {
	//url := "https://jobs.bilibili.com/api/campus/position/positionList"
	// 构造请求体
	//requestBody := []byte(`{"pageSize":10,"pageNum":"2","positionName":"","postCode":[],"postCodeList":[],"workLocationList":[],"workTypeList":["0"],"positionTypeList":["0"],"deptCodeList":[],"recruitType":null}`)

	req, err := http.NewRequest(Method, url, bytes.NewBuffer(requestBody))
	if err != nil {
		fmt.Println(err)
		return
	}
	// 添加请求头部信息
	req.Header.Add("authority", "jobs.bilibili.com")
	req.Header.Add("accept", "application/json, text/plain, */*")
	req.Header.Add("accept-language", "zh-CN,zh;q=0.9")
	req.Header.Add("content-type", "application/json;charset=UTF-8")
	req.Header.Add("origin", "https://jobs.bilibili.com")
	req.Header.Add("referer", "https://jobs.bilibili.com/campus/positions?type=0&page=2")
	req.Header.Add("sec-ch-ua", `"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"`)
	req.Header.Add("sec-ch-ua-mobile", "?0")
	req.Header.Add("sec-ch-ua-platform", `"Windows"`)
	req.Header.Add("sec-fetch-dest", "empty")
	req.Header.Add("sec-fetch-mode", "cors")
	req.Header.Add("sec-fetch-site", "same-origin")
	req.Header.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36")
	req.Header.Add("x-appkey", "ops.ehr-api.auth")
	req.Header.Add("x-channel", "campus")
	req.Header.Add("x-csrf", "728e3c6c-e981-412e-be94-ab1f76557972")
	req.Header.Add("x-usertype", "2")

	// 发送请求并获取响应
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer resp.Body.Close()

	// 处理响应数据
	err = json.NewDecoder(resp.Body).Decode(&receive)
	if err != nil {
		fmt.Println("Error decoding JSON:", err)
		return
	}
	//将所有的id信息添加到Allid数据中
	for i := 0; i < 10; i++ {
		//AllId = append(AllId, receive.Data.List[i].Id)
		if len(receive.Data.List) == i {
			return
		}
		AllId = append(AllId, receive.Data.List[i].Id)
	}
}


http://www.niftyadmin.cn/n/297873.html

相关文章

理解生成式AI

文章目录 1、专业术语2、生成式AI3、ChatGPT1. 理解LLMRNN循环神经网络Seq2Seq模型ChatGPT与Bert区别 4、模型的生成和部署 1、专业术语 LLM&#xff1a;大型语言模型 GAI&#xff1a;通用人工智能 NLP&#xff1a;自然语言处理 CNN&#xff1a;卷积神经网络 RNN&#xff…

【写一个hello的html页面,将页面放到服务器,通过浏览器访问页面,这个过程是怎么实现的?】第一个 servlet 程序

第一个 servlet 程序 第一个 servlet 程序1. 创建项目创建好后的 默认目录 解析 2. 引入依赖为什么要引入依赖&#xff1f; 3. 创建目录结构1、在 main 目录下创建一个 webapp 目录2、在 webapp 下创建一个 WEB-INF 目录3、在 WEB-INF 目录下创建一个 web.xml 文件4、web.xml 需…

java spring MVC REST风格概念叙述

REST属于spring MVC中的一个知识点 REST是三个单词的缩写 即 Representational State Transfer 意思为 表现形式状态转换 老实说 不用尝试字面上理解 因为字面意思 确实是比较抽象 其实 意思就是 访问网络资源的格式 转换 下图 对比了 传统风格和REST风格 请求路径的差别 RES…

如何基于LLMs使用LangChain构建强大的差异化应用--LangChain之初体验

近年来,语言模型(LMs)特别是LLMs已经成为最令人兴奋和最有影响力的技术之一。 它们可以为各种目的生成自然语言文本,例如回答问题、撰写摘要、创建故事等等。然而,仅使用LMs还不足以构建真正强大且与众不同的应用程序。您还需要: 将LMs连接到其他数据源,如文档、数据库、网…

C++之类和对象(二)

目录 前言 类的6个默认成员函数 1.构造函数 1.1 概念 1.2 特性 2. 析构函数 2.1 概念 2.2 特性 3. 拷贝构造函数 3.1 概念 3.2 特征 4.赋值运算符重载 4.1 运算符重载 4.2.赋值运算符重载 4.3 前置和后置重载 5. .const成员 6.取地址及const取地址操作符重载 前…

【高数+复变函数】傅里叶级数

文章目录 1. 傅里叶级数1.1 和差化积积化和差1.2 三角函数系的正交性1.3 系数公式求解1.4 展开条件1.5 变形下的傅里叶 在课程学习中&#xff0c;感觉这一部分的东西频繁会被用到&#xff0c;因此写下来做个总结。 1. 傅里叶级数 在科学技术中&#xff0c;常常会遇到各种各样的…

mac php8 安装xdebug模块失败

安装 xdebug 模块,官网有详细介绍Xdebug: Documentation Installation 本机是mac php使用brew安装,想着可以直接使用以下方式安装,还是美滋滋的 但是安装途中发生了错误 PHP Warning: mkdir(): File exists in /usr/local/Cellar/php/8.0.10/share/php/pear/System.php on…

手把手带你写一份优秀的开发求职简历(六)工作经历的亮点突出

前言 上一节,我们说到了在“技术能力”这一栏,该怎么把精通的,熟练的,和了解的知识点层次分开,同时最后注明了如果想写的不那么普通,该怎么利用HR发布的修饰词来给自己的简历提升一个level,增强HR的好感,给自己的简历多一些机会。 这一节,我们针对“工作经历”进行优…