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

news2024/11/24 16:46:44

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

请添加图片描述

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

文章目录

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

页面数据分析

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

爬取动态页面

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

判断类型

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

抓包模拟请求头

步骤一:

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

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

在这里插入图片描述

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

// 抓取职位信息,主要作用:抓取到页面的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.coloradmin.cn/o/499691.html

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

相关文章

Solr(1):Solr概述

1 概述 Solr 是一个基于 Apache Lucene 之上的搜索服务器&#xff0c;它是一个开源的、基于 Java 的信息检索库。它旨在驱动功能强大的文档检索应用程序 - 无论您需要根据用户的查询将数据服务到何处&#xff0c;Solr 都可以为您服务。Solr与应用程序的集成以为您服务。 下面…

es 7.x 通过DSL语句添加doc数据

一 在es中doc数据的crud操作 1.1 说明 本案例操作 接上一篇的基础上进行操作。 1.2 添加doc 方式为post http://localhost:9200/order_item/_doc 添加文档数据 必须是post提交&#xff0c;不能是put 1.3 查看文档数据 http://localhost:9200/order_item/_doc/_searc…

118-Linux_数据库_索引

文章目录 一.索引是什么?二.索引为什么选择b树三.测试索引1.在mysql中创建数据库 test_indexdb2.在test_indexdb中创建表 test_index3.运行程序向表中插入1万条数据&#xff0c;都是字符串4. 查询验证 一.索引是什么? 索引是一种特殊的文件&#xff0c;它包含着对数据表里所…

浅谈osgEarth操控器类的createLocalCoordFrame函数如何将局部坐标系的点转为世界坐标系下的Martix(ENU坐标)

在osgEarth操控器类的EarthManipulator中的如下函数&#xff1a; void EarthManipulator::setLookAt(const osg::Vec3d& center,double azim,double pitch,double range,const osg::Vec3d& posOffset) {setCenter( center );.... //…

二、PEMFC基础之电化学与反应动力学

二、PEMFC基础之电化学与反应动力学 1.电流、电流密度2.反应速率常数3.交换电流密度4.电化学动力学奠基石B-V方程5.活化损失计算Tafel公式6.计算案例 1.电流、电流密度 由法拉第定律 i d Q d t n F d N d t i\frac{dQ}{dt}\frac{nFdN}{dt} idtdQ​dtnFdN​ j i A j\frac{…

查询缓存实现、缓存更新策略选择、解决缓存穿透缓存雪崩缓存击穿问题

文章目录 1 什么是缓存?1.1 为什么要使用缓存1.2 如何使用缓存 2 给商户信息查询业务添加缓存2.1 缓存模型和思路2.2 代码如下 3 缓存更新策略3.1 数据库缓存不一致解决方案&#xff1a;3.2 数据库和缓存不一致采用什么方案3.3 删除缓存还是更新缓存&#xff1f;3.4 如何保证缓…

MySQL --- DQL

使用DDL语句来操作数据库以及表结构&#xff08;数据库设计&#xff09;使用DML语句来完成数据库中数据的增、删、改操作&#xff08;数据库操作&#xff09; 学习数据库操作方面的内容&#xff1a;查询&#xff08;DQL语句&#xff09;。 查询操作我们分为两部分学习&#…

chatgpt如何接入本地知识库?我们来看看EMNLP 2022 INFO是如何融入本地知识的

一、概述 title&#xff1a;You Truly Understand What I Need : Intellectual and Friendly Dialogue Agents grounding Knowledge and Persona 论文地址&#xff1a;You Truly Understand What I Need : Intellectual and Friendly Dialog Agents grounding Persona and Know…

基于S/Key协议的身份认证系统设计与实现【python】

实验内容 1 、 身份认证系统设计 设计身份认证系统的功能、主要界面、主要软件模块&#xff0c;以及采用的认证技术路线和方法。 2 、 编程实现所设计的身份认证系统 在C、Python或Java程序设计环境下&#xff0c;编程实现基于S/Key协议的身份认证系统。要求实现的身份认证…

计算机中丢失msvcp140.dll无法启动此程序怎么办?msvcp140.dll在哪里

电脑系统中的 msvcp140.dll 文件是 Microsoft Visual C Redistributable 组件的一部分&#xff0c;它们提供了许多在 Windows 操作系统中运行的应用程序所需的重要函数和库。如果丢失了 msvcp140.dll 文件&#xff0c;你可能会遇到多种错误&#xff0c;比如无法运行应用程序、系…

【RabbitMQ】安装及六种模式

文章目录 安装rabbitmq镜像访问容器内部15672端口映射到外面的端口地址RabbitMQ六种模式Hello world模式Work queues模式Publish/Subscribe模式交换机fanout类型 Routing模式Topics模式RPC模式 rabbitmq&#xff1a;0->1的学习 学习文档&#xff1a;https://www.cnblogs.com…

Java集合之双列集合

双列集合特点 双列集合一次需要添加一对数据&#xff0c;分别是键和值键不能重复&#xff0c;值可以重复键和值是一一对应的&#xff0c;每一个键只能找到自己对应的值键 值这个整体称为“键值对”或者“键值对对象”&#xff0c;Java中叫“Entry对象” 双列集合的体系结构 Ma…

linux系统systemd初始化进程

前言&#xff1a;目前绝大多数服务器系统以及从RHEL6换成RHEL7了&#xff0c;以前习惯使用service来管理系统服务的&#xff0c;那么现在就比较郁闷了&#xff0c;RHEL7系统中使用systemctl命令来管理服务。 systemctl启动、重启、停止、查看状态命令&#xff1a; systemctl …

算法竞赛字符串篇之C++中string的成员函数

2023年5月7日&#xff0c;周日中午&#xff1a; 今天决定从字符串这个知识点开始学起&#xff0c;记录一下我今天的字符串学习。 不定期更新。 相关的英文文档&#xff1a; https://cplusplus.com/reference/string/string/ 容量方面的成员函数&#xff1a; empty&#xff…

基于AT89C51单片机的电子闹钟设计与仿真

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87761718?spm=1001.2014.3001.5503 源码获取 主要内容: 基于51单片机设计一个电子闹钟,至少具有以下功能:时间的设定、时间的调整、闹钟的设定、温度的设定。 基本要求:…

排队论_M/M/1/inf/inf 问题

例:某修理店只有一一个修理工人&#xff0c;来修理的顾客到达数服从泊松分布&#xff0c;平均每小时4人;修理时间服从负指数分布&#xff0c;平均需6分钟。求: (1)修理店空闲的概率; (2)店内有3个顾客的概率; (3)店内至少有1个顾客的概率; (4)店内顾客的平均数; (5)顾客在店内的…

显著性检测:从传统方法到深度学习网络的演进与挑战

显著性检测技术在计算机视觉领域中扮演着至关重要的角色&#xff0c;它是一项对图像中最显著或最有区别的视觉特征进行分析和提取的技术。显著性检测技术可以为计算机视觉任务提供帮助&#xff0c;例如图像分割、目标检测、场景理解、图像检索和人机交互等方面。 本文将从传统方…

【MySQL】基于规则的优化(内含子查询优化;派生表;物化表;半连接;标量子查询;行子查询)

概念 常量表&#xff1a;下述两种查询方式查询的表&#xff1a; 类型1&#xff1a;查询的表中一条记录都没有&#xff0c;或者只有一条记录。 类型2&#xff1a;使用主键等值匹配或者唯一二级索引列等值匹配作为搜索条件来查询某个表 派生表&#xff1a;放在FROM子句后面的子…

UDP报头、TCP报头、IP报头、MAC头部、ARP头部

前言&#xff1a;DUP报头、TCP报头、IP报头、MAC头部、ARP头部。 UDP报头&#xff1a; UDP报头由八个字节组成&#xff0c;每个字段都是两个字节 &#xff1a; 1.源端口号&#xff1a;发送方端口号&#xff0c;需要对方回信的时候选用&#xff0c;不需要对方回信的时候置0 …