Python爬虫某招聘网站的岗位信息

news/2024/5/18 15:04:50/文章来源:https://blog.csdn.net/qq_46614154/article/details/105295968

前言

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:阿尔法游戏

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun

故事又要从一个盆友说起

昨晚有个盆友 问我 爬虫学的怎么样了?

正当我不明所以之际,盆友的微信语音通话接了进来

友:“看你在学python,爬虫写的怎么样了呀,我想抓一下某招聘网站的数据,能帮我整一个吗,不行的话我也去看看”

我:“哦哦,你不是技术嘛,自己来嘛

友:“我不是没怎么接触过嘛”

我:“行,刚好我也学习下,周末有时间我帮你看下”

简单介绍下这个朋友吧,游戏圈某技术大拿,真大拿的那种!!


故事聊完了,咱们开工吧

1、前期准备

因为是爬虫,所以咱们需要用到如下几个库

  • requests

  • fake_useragent

  • json

  • pandas

Requests 的介绍是这样的: 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用

反正就是你用来获取网页数据需要用到的,本次咱们只需要用到get方法:

res=request.get(url)构造一个向服务器请求资源的url对象, 这个对象是Request库内部生成的, 这时候的res返回的是一个包含服务器资源的Response对象,包含从服务器返回的所有的相关资源。

fake_useragent 直译就是 假身份,作用和直译基本一样,是个表里不一的“人”

UserAgent是识别浏览器的一串字符串,相当于浏览器的身份证,在利用爬虫爬取网站数据时,频繁更换UserAgent可以避免触发相应的反爬机制。fake-useragent对频繁更换UserAgent提供了很好的支持,可谓防反扒利器。

json 就是上期我们本来打算介绍但是换了一个库实现的 用于处理json数据,可以将已编码的 JSON 字符串解码为 Python 对象

pandas 是我们的老朋友了,因为常和excel打交道,对表格的钟爱,所以pandas在这里主要作用只是将抓取的数据转化为dataframe型后导出成excel表

导入需要用到的库

import requests
from fake_useragent import UserAgent
import json
import pandas as pd
import time

2、任务分析

其实这步应该在 第1步 前期准备 之前,但是文档写到了这里,咱也不想回去了。

这一步很关键,主要是思路分析,大致可以分为以下几点:

  •  明确你需要的数据是什么

  •  找到你需要的数据来源

  •  理清原始数据的结构

  •  输出你需要的数据形式

1)明确你需要的数据

比如盆友需要岗位信息,包含哪些字段,常规的有岗位名称、薪酬范围、需要的工作年限等等。当你明确需要的数据指标之后,你再去数据来源看是否有这些指标已经如何获取。

岗位薪酬年限
运营30-50k5-8年
技术30-50k5-8年

2)找到你需要的数据来源

盆友需要的是脉脉上的岗位信息,那么我们需要熟悉脉脉的岗位信息在哪可见,以及它们是如何展示的。

这是移动端

移动端没法直接获取url信息,我们可以去pc端看看

这是pc端

这里pc端用的是Google Chrome浏览器 为了让你能够点开xhr等等,你需要安装一个浏览器工具

下载浏览器驱动程序:http://chromedriver.storage.googleapis.com/index.html

查看驱动和浏览器版本的映射关系:http://blog.csdn.net/huilan_same/article/details/51896672

pc端是一个列表,我们通过下拉可以加载更多,这说明这个页面是非静态页面,因此在获取url的时候需要特别注意。

操作流程:

  • 第1步,获取数据源URL地址: F12 打开浏览器开发者工具调试页面,选中network——xhr,刷新网页后选择 招聘,可以看见右侧有刷新调试页面有内容刷新,选中最近一个刷新的条目即可获取数据源url地址,见右侧的request URL内容即是。

  • 第2步,找到该URL地址规律: url = 'https://maimai.cn/sdk/company/obtian_company_job?webcid=jYZTTwkX&count=20&page=0&job_title='(你点了应该会提示没数据),仔细分析,我们可以得到动态变化部分应该为count和page,count表示每页20个,page表示当前页数。通过修改count和page后再浏览器打开我们验证了该判断。

  • 第3步,获取数据源URL地址: 因为网页动态,这里建议把cookie记录下来备用,cookie数据在request Header中。

3)理清原始数据的结构

当我们获取到数据来源url之后,就需要理清这些原始数据长啥样,如此才好去解析整理出想要的信息。打开一个url,我们发现是一个json,嗯,很完整的多层json。

网页json图

使用json.loads方法做简单的预处理,然后我们一层一层寻找目标数据指标所在。

【这里我是通过spyder变量管理器 点开数据 让大家直观理解】

  • 第一层:字典

  • 第二层:字典

  • 第三层:列表

  • 第四层:字典

4)输出你需要的数据

通过理清原始数据结构,结合你需要的数据,咱们就可以进行数据简单过滤选择了

直接创建一个空字典,存储你需要的数据信息

3、实现细节

1)材料准备

将url按照规律进行拆分

#url里count和page是变化的规律所在,自选一个进行循环
#因脉脉没有通用的岗位list汇总页面,因此如果想获取其他list可以通过搜索或者查询指定公司职位后修改url即可
#url = https://maimai.cn/sdk/company/obtian_company_job?webcid=jYZTTwkX&count=20&page=50&job_title=path = 'https://maimai.cn/sdk/company/obtian_company_job?webcid=jYZTTwkX&count=20&page='
tail = '&job_title='#这里需要注意,一定要加cookie,否则将获取不到数据
headers = {"User-Agent": UserAgent(verify_ssl=False).random,"Cookie":'填入你自己的浏览器cookie值'}

2)数据请求

请求数据并用json.load()简单进行数据类型转化python对象

#创建空list,用于存储抓取的岗位信息(字典存储)
list = []
#计数用的变量n
n = 0 
#因单页显示20条岗位信息,所以需要翻页(实际网页效果是下拉加载更多)
#数据为json,因此需要json.load 解析
for i in range(0,51): #我这里只去前50页数据url = path + str(i) +tailresponse_comment = requests.get(url,headers = headers)json_comment = response_comment.textjson_comment = json.loads(json_comment)

3)数据筛选

接上个for循环,因为每页内有20条数据,因此需要再用一个循环取出每条数据并存入一个空字典中,同时将每个字典合到空列表中进行汇总

    data = json_comment['data']#单页显示20条岗位信息,逐一采集for i in range(len(data['normal_data'])):n = n+1#创建空字典用于存储单个岗位信息result = {}result['工作年限'] = data['normal_data'][i]['worktime']result['学历要求'] = data['normal_data'][i]['degree']result['职位描述'] = data['normal_data'][i]['description']result['公司名称'] = data['normal_data'][i]['company']result['工作地点'] = data['normal_data'][i]['city']result['职位名称'] = data['normal_data'][i]['position']result['岗位薪酬'] = data['normal_data'][i]['salary_info']result['最近修改时间'] = data['normal_data'][i]['modify_time']result['发布时间'] = data['normal_data'][i]['pub_time']result['浏览量'] = data['normal_data'][i]['views']result['发布人职位'] = data['normal_data'][i]['user']['position'].upper()#将岗位信息存入list中   list.append(result)

4)数据导出

直接使用pandas的to_excel方法导出数据成excel

#将存有岗位信息的列表转化为dataframe表格形式   
df = pd.DataFrame(list)
df.to_excel(r'F:\Python\岗位数据.xlsx',sheet_name='岗位信息',index = 0

5)结果展示

 

4、完整代码

import requests
from fake_useragent import UserAgent
import json
import pandas as pd
import timestart_time = time.perf_counter()#url里count和page是变化的规律所在,自选一个进行循环
#因脉脉没有通用的岗位list汇总页面,因此如果想获取其他list可以通过搜索或者查询指定公司职位后修改url即可
#url = https://maimai.cn/sdk/company/obtian_company_job?webcid=jYZTTwkX&count=20&page=50&job_title=path = 'https://maimai.cn/sdk/company/obtian_company_job?webcid=jYZTTwkX&count=20&page='
tail = '&job_title='#这里需要注意,一定要加cookie,否则将获取不到数据
headers = {"User-Agent": UserAgent(verify_ssl=False).random,"Cookie":'你的cookie'}#创建空list,用于存储抓取的岗位信息(字典存储)
list = []
#计数用的变量n
n = 0 
#因单页显示20条岗位信息,所以需要翻页(实际网页效果是下拉加载更多)
#数据为json,因此需要json.load 解析
for i in range(1,2):url = path + str(i) +tailresponse_comment = requests.get(url,headers = headers)json_comment = response_comment.textjson_comment = json.loads(json_comment)data = json_comment['data']
#    print('\r正在抓取第%d页岗位信息(每页20个岗位)'%i,end=' ')#单页显示20条岗位信息,逐一采集for i in range(len(data['normal_data'])):n = n+1#创建空字典用于存储单个岗位信息result = {}result['工作年限'] = data['normal_data'][i]['worktime']result['学历要求'] = data['normal_data'][i]['degree']result['职位描述'] = data['normal_data'][i]['description']result['公司名称'] = data['normal_data'][i]['company']result['工作地点'] = data['normal_data'][i]['city']result['职位名称'] = data['normal_data'][i]['position']result['岗位薪酬'] = data['normal_data'][i]['salary_info']result['最近修改时间'] = data['normal_data'][i]['modify_time']result['发布时间'] = data['normal_data'][i]['pub_time']result['浏览量'] = data['normal_data'][i]['views']result['发布人职位'] = data['normal_data'][i]['user']['position'].upper()#将岗位信息存入list中   list.append(result)print('\r已整合%d个岗位信息'%n,end=' ')use_time = time.perf_counter()
print('\n合计运行时长:{0:.2f} 秒'.format(use_time-start_time))
#将存有岗位信息的列表转化为dataframe表格形式   
df = pd.DataFrame(list)
df.to_excel(r'F:\Python\脉脉-字节跳动招聘岗位.xlsx',sheet_name='岗位信息',index = 0)

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【趣味案例】Python 教你 4 行代码开发新闻网站通用爬虫

GNE(GeneralNewsExtractor)是一个通用新闻网站正文抽取模块,输入一篇新闻网页的 HTML, 输出正文内容、标题、作者、发布时间、正文中的图片地址和正文所在的标签源代码。GNE在提取今日头条、网易新闻、游民星空、 观察者网、凤凰网…

【趣味案例】用Python假装黑客装逼,当着朋友的面破解他的网站密码!

如何破解iphone登陆密码 今天看了一篇关于如何破解iphone手机密码的文章,瞬间觉得科学技术不是第一生产力,why? 根据“可靠消息”称,即便美国FBI也无法轻易的对iphone手机进行暴力破解,当然美国有一家黑客公司可针对i…

爬虫Scrapy框架学习(六)-腾讯招聘网站台爬取案例-深究CrawlSpider类在项目中的具体功能

在本案例中将对传统Spider类和CrawlSpider在实际项目中的应用进行对比,所完成的功能为一样的结果,采用三种不同的方式进行代码编写,请读者自行学习。 传统Spider实现数据爬取CrawlSpider实现数据读取(网站解析有问题暂时不能够实…

如何用Python爬取小游戏网站,把喜欢的游戏收藏起来(附源码)

简介: Python 是一门简单易学且功能强大的编程语言,无需繁琐的配置,掌握基本语法,了解基本库函数,就可以通过调用海量的现有工具包编写自己的程序,轻松实现批量自动化操作,可以极大提高办公和学…

遇到网站的反爬虫机制,那么我们应该来如何应对呢?

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 1、使用代理 适用情况:限制IP地址情况,也可解决由于“频繁点击”而需要输入验证码登陆的情况。 这种情况最好的办法就是…

django网站部署流程

服务器 买个服务器,在管理控制台里开启80端口443端口,我用的是阿里云,学生免费试用一年(白嫖)远程登录到服务器,用scp将本地项目上传到云服务器 # win10的Powershell或者下载WinSCP软件 scp -r 本地项目文…

2008服务器网站设置密码,2008服务器怎么设置密码

2008服务器怎么设置密码 内容精选换一换代码迁移工具进行代码迁移时,需要调用Linux下的rpm、deb等命令才能完成扫描和迁移相关任务,这些命令和逻辑必须在后端Linux运行。IDE插件只支持以Web模式使用root用户安装工具,不支持以CLI模式安装工具…

vue - - - vuepress文档网站部署github

环境 安装nodejs: https://nodejs.org/en/, 版本不能太高(> 8.6即可) 安装git: https://git-scm.com/ Hello World vuepress官网: https://www.vuepress.cn/ 第3步需要等待下载依赖. 1~3步完整命令: zichenDESKTOP-3176F4L MINGW64 ~/Desktop $ mkdir vuepress-starter…

网站数据统计分析之一:日志收集原理及其实现

转 http://my.oschina.net/leejun2005/blog/292709 网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计 和 腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于jav…

科技企业网站(1) - 开发背景 - 系统设计

1.开发背景 2.系统设计 2.1 系统目标 界面设计见解、友好、美观大方。操作简单、快捷方便。数据存储安全、可靠。信息分类清晰、准确。强大的模糊查询功能,保证数据查询的灵活性。提供灵活、方便的权限设置功能,使整个系统的管理明确。 2.2 系统功能…

科技企业网站(2) - ThinkPHP框架入门基础知识

1.基础概念 2.使用ThinkPHP框架开发的目录结构 ThinkPHP框架中目录分为两种:系统目录和项目目录。 系统目录是下载ThinkPHP框架库本身的,而项目目录是用户实际应用的目录。ThinkPHP采用自动创建文件夹的机制。 3.自动生成目录,编写入口文…

科技企业网站(3) - 数据库设计

1.数据库概要说明 采用MySQL数据库,用来存储图书相关信息、新闻相关信息、管理员信息等,这里将数据库命名为db_project,其中包含了3张数据表,用于存储不同的信息。 2.数据库概念设计 通过系统功能结构的确定,规划…

科技企业网站(5) - 业界新闻页面设计

1.ThinkPHP框架的导包和加载技术 2.业界新闻页面实现过程 循环输出二位数组的标签&#xff0c;此标签包含两个参数&#xff0c;name指定控制器中传递进来的模板变量&#xff0c;id指定模板变量中的临时变量。 <!DOCTYPE html> <html lang"zh-CN">&l…

科技企业网站(6) - 图书开发页面设计

一、图书开发模块实现过程 1.图片平滑滚动效果关键代码&#xff1a; <!-- 设置图片初始向左滚动并且每隔200毫秒滚动1个像素距离 --> <img src"../Public/Images/JavaII.jpg" width"140px" height"174px" /> <img src"../…

科技企业网站(7) - 后台登录模块

1.管理员权限控制技术 难点&#xff1a;如何才能防止用户越过表单登录到后台管理界面 解决&#xff1a;为了体现越过表单的可行性&#xff0c;笔者在编写的网站程序&#xff0c;故意将SESSION变量写到控制器中&#xff0c;这样任何一个用户都可以登录到网站的后台管理界面。但…

移动前端——通过Chrome自带的开发者工具Emulation模拟移动设备访问网站

一、使用方法 通过快捷键F12或ctrlshifti打开开发者工具&#xff0c;点击左上角类似手机的图标即可查看到Emulation所在的目录&#xff1b; 二、关于Emulation Device&#xff08;设备信息&#xff09;——Model 用于选择模拟的移动设备 ——Resolution 分辨率设置——Divic…

Docker 1--相关资源网站

大家好&#xff0c;我是神韵&#xff0c;是一个技术&生活博主。出文章目的主要是两个&#xff0c;一是好记忆不如烂笔头&#xff0c;记录总结中提高自己。二是希望我的文章可以帮到大家。欢迎来点赞打卡&#xff0c;你们的行动将是我无限的动力。 本篇主题是&#xff1a;相…

一家公司网站上的招聘人才招聘栏目

我不做任何评价。 转载于:https://www.cnblogs.com/Johnson/archive/2007/06/13/782211.html

出租空间位置,给您的网站做连接!

为防止空间位置的浪费&#xff0c;特批了一块地下来&#xff0c;让大家来踩&#xff0c;呵呵&#xff0c;需要搞连接的直接留言&#xff0c;嘿嘿&#xff0c;不过&#xff0c;可不是完全免费的哦&#xff01;转载于:https://blog.51cto.com/sam2080/8093