前言

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

作者:阿尔法游戏

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-50k 5-8年
技术 30-50k 5-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) +tail
response_comment = requests.get(url,headers = headers)
json_comment = response_comment.text
json_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 time start_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) +tail
response_comment = requests.get(url,headers = headers)
json_comment = response_comment.text
json_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)

2020年最新Python教程:

如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的吗?

说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的Python教程。

以上这些教程小编已经为大家打包准备好了,希望对正在学习的你有所帮助!

获取方式,私加群695185429即可免费获取。

 

Python爬虫某招聘网站的岗位信息的更多相关文章

  1. python爬虫之小说网站--下载小说(正则表达式)

    python爬虫之小说网站--下载小说(正则表达式) 思路: 1.找到要下载的小说首页,打开网页源代码进行分析(例:https://www.kanunu8.com/files/old/2011/244 ...

  2. python爬虫之天气预报网站--查看最近(15天)的天气信息(正则表达式)

    python爬虫之天气预报网站--查看最近(15天)的天气信息(正则表达式) 思路: 1.首先找到一个自己想要查看天气预报的网站,选择自己想查看的地方,查看天气(例:http://www.tianqi ...

  3. python爬虫之12306网站--火车票信息查询

    python爬虫之12306网站--火车票信息查询 思路: 1.火车票信息查询是基于车站信息查询,先完成车站信息查询,然后根据车站信息查询生成的url地址去查询当前已知出发站和目的站的所有车次车票信息 ...

  4. Python爬取招聘网站数据,给学习、求职一点参考

    1.项目背景 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于“数据”方面的人才需求也在不断增大.因此了解当下企业究竟需要招聘什么样的人才?需要什么样的技能?不管是对于 ...

  5. python爬虫之12306网站--车站信息查询

    python爬虫查询车站信息 目录: 1.找到要查询的url 2.对信息进行分析 3.对信息进行处理 python爬虫查询全拼相同的车站 目录: 1.找到要查询的url 2.对信息进行分析 3.对信息 ...

  6. 利用Python爬虫刷新某网站访问量

    前言:前一段时间看到有博友写了爬虫去刷新博客访问量一篇文章,当时还觉得蛮有意思的,就保存了一下,但是当我昨天准备复现的时候居然发现文章404了.所以本篇文章仅供学习交流,严禁用于商业用途 很多人学习p ...

  7. python爬取招聘网站数据

    # -*- coding: utf-8 -*- # 爬虫分析 from bs4 import BeautifulSoup from lxml import etree from selenium im ...

  8. Python爬虫: "追新番"网站资源链接爬取

    “追新番”网站 追新番网站提供最新的日剧和日影下载地址,更新比较快. 个人比较喜欢看日剧,因此想着通过爬取该网站,做一个资源地图 可以查看网站到底有哪些日剧,并且随时可以下载. 资源地图 爬取的资源地 ...

  9. 编写python爬虫采集彩票网站数据,将数据写入mongodb数据库

    1.准备工作: 1.1安装requests: cmd >> pip install requests 1.2 安装lxml: cmd >>  pip install lxml ...

随机推荐

  1. 贵州省网络安全知识竞赛团体赛Writeup-phpweb部分

    0x01 混淆后门#conn.php 首先还是拖到D盾扫描 打开conn.php发现底部有那么一串代码: 对这个代码进行分析 首先可以对几个比较简单的变量输出看一下 $s输出内容为create_fun ...

  2. 单片机的 HexToStr HexToBcd BcdToStr 几个转换函数

    今天写单片机一个程序 要检查一些数据,想发到串口调试的软件上在电脑上查看 有些转换函数 想网上找一个 看看都是很多的垃圾文章 很多的程序都不能用,那些发文章的人也不用心 所以我还是自己动手写一下吧 写 ...

  3. hdu1532 最大流板子题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 题目给出源点和漏点,还有一些边,要求源与漏之间的最大流,我采用了Edmonds Karp算法,该 ...

  4. 如何将一篇文章导入Endnote并将引用插入Word

    Endnote作为一款专注管理文献引用的工具用起来还是很方便的,极大地简化了管理引用格式等相关工作,让我们能够把更多精力用在写文章本身. 今天就介绍一下如何将一篇我们看到的觉得有参考价值的文章导入wo ...

  5. 一 JVM垃圾回收模型

    一 JVM垃圾回收模型 一. GC算法 1.1 标记-清除算法(Mark-Sweep) 算法分为"标记"和"清除"两个阶段首先标记出所有需要回收的对象,然后回收 ...

  6. python之常用模块ymal

    在学习python如何操作yml文件之前,我们先科普一下yml的格式 yaml是专门写配置文件的语言,非常简洁和强大,比json更加方便 YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便 ...

  7. iOS UmbrellaFramework

    一.umbrella framework 将几个已经封装好的 framework 封装成一个,封装的这种 framework 就是 umbrella framework. Apple 的官方文档中明确 ...

  8. iOS UmbrellaHeader

    Lexical or Preprocessor Issue - Umbrella header for module 'xxx' does not include header 'xxx.h' fra ...

  9. 【译】Java SE 14 Hotspot 虚拟机垃圾回收调优指南

    原文链接:HotSpot Virtual Machine Garbage Collection Tuning Guide,基于Java SE 14. 本文主要包括以下内容: 优化目标与策略(Ergon ...

  10. WEB安全——XML注入

    浅析XML注入 认识XML DTD XML注入 XPath注入 XSL和XSLT注入 前言前段时间学习了.net,通过更改XML让连接数据库变得更方便,简单易懂,上手无压力,便对XML注入这块挺感兴趣 ...