爬虫实例二:爬取拉勾网招聘信息

如果是第一次看本教程的同学,可以先从一开始:
爬虫实例一:爬取豆瓣影评
欢迎关注微信公众号:极简XksA
微信账号:xksnh888
转载请先联系微信号:zs820553471
交流学习

一、学习开始前需安装模块

pip install requests
pip install pandas
pip install numpy
pip install jieba
pip install re
pip install pyecharts
pip install os

二、讲解概要

为什么要爬取拉勾网?
哈哈哈,当然是因为简单,啪,原因如下:
  (1)动态网页,爬起来难度更大,讲起来更有内容;
  (2)与一般情况不同,我们所需内容通过get请求获取不了,需进行页面分析。

  • 1.爬取拉勾网求职信息
      (1)requests 请求,获取单页面
      (2)分析页面加载,找到数据
      (3)添加headers 信息,模仿浏览器请求
      (4)解析页面,实现翻页爬取
      (5)爬取数据存入csv文件
  • 2.数据分析与可视化
      (1)分析数据
    ​  (2)pyecharts实现数据可视化

三、正式开始,竖起你的小眼睛

爬取拉勾网求职信息
(1)requests 请求,获取单页面
# 我们最常用的流程:网页上复制url->发送get请求—>打印页面内容->分析抓取数据
# 1.获取拉钩网url
req_url = 'https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput='
# 2.发送get请求
req_result = requests.get(req_url)
# 3.打印请求结果
print(req_result.text)

由上面的流程,打印输出结果如下:

<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="renderer"  content="webkit"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><script type="text/javascript" src="https://www.lagou.com/utrack/trackMid.js?version=1.0.0.3&t=1529144464"></script><body><input type="hidden" id="KEY" value="VAfyhYrvroX6vLr5S9WNrP16ruYI6aYOZIwLSgdqTWc"/><script type="text/javascript">HZRxWevI();</script>
é?μé?¢?? è????-...<script type="text/javascript" src="https://www.lagou.com/upload/oss.js"></script></body>
</html>

看的出来,与我们想象的还是差别很大。
为什么会出现这种情况,很简单,因为它并不是简单的静态页面,我们知道请求方式有get和post请求两种基本区别如下:

(1)Get是向服务器发索取数据的一种请求;而Post是向服务器提交数据的一种请求,要提交的数据位
于信息头后面的实体中。GET和POST只是发送机制不同,并不是一个取一个发.
(2)GET请求时其发送的信息是以url明文发送的,其参数会被保存在浏览器历史或web服务器中,
而post则不会某(这也是后面我们翻页的时候发现拉勾网翻页时 浏览器 url栏地址没有变化的原因。)
(2)分析页面加载,找到数据
  • 1.请求分析
          在拉钩网首页,按F12进入开发者模式,然后在查询框中输入python,点击搜索,经过我的查找,终于找到了页面上职位信息所在的页面,的确是一个post请求,而且页面返回内容为一个json格式的字典。

  • 2.返回数据内容分析
    页面上:我们主要获取7个数据(公司 | 城市 | 职位 | 薪资 | 学历要求 | 工作经验 | 职位优点)

json数据中:我把爬下来的json数据整理了一下,如下图:

我们会发现,我们需要的数据全在:req_info['content']['positionResult']['result']里面,为一个列表,而且还包含许多其他的信息,本次我们不关心其他数据。我们所需要数据如下图框:

(3)添加headers 信息,模仿浏览器请求

通过上面的请求分析我们可以找到post请求的网址为:https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false,如果此时我们直接发送post请求,会提示如下代码:

{'success': False, 'msg': '您操作太频繁,请稍后再访问', 'clientIp': '122.xxx.xxx.xxx'}

出现这种提示的原因是,我们直接post访问url,服务器会把我们误认为‘机器人’,这也是一种反爬,解决方法很简单,加一个请求头即可完全模拟浏览器请求,请求头获取见下图:

(4)解析页面,实现翻页爬取
  • 怎么实现翻页呢?
          一般,我们实现翻页的方法就是自己手动的在浏览器翻页,然后观察网址的变化,找出规律,可是翻拉钩网的时候我们会发现,在浏览器里翻页的时候,url框内的网址并没有变化。
  • 再次页面分析?
          还得继续分析页面求,我们必须要相信,肯定是有变化的,不然,页面内容怎么可能自己变化呢?
          分析发现下面规律:
    post请求中,有个请求参数->表单数据,包含三个参数first、kd、pn,通过动图演示,我们不难猜出其含义:
data = {'first':'true', # 是不是第一页,false表示不是,true 表示是'kd':'Python', # 搜索关键字'pn':1 # 页码}

现阶段代码:

import requests
# 1. post 请求的 url
req_url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
# 2. 请求头 headers
headers = {'你的请求头'}
# 3. for 循环请求
for i in range(1,31):data = {'first':'false','kd':'Python','pn':i}# 3.1 requests 发送请求req_result = requests.post(req_url,headers = headers,data = data)req_result.encoding = 'utf-8'# 3.2 获取数据req_info = req_result.json()# 打印出获取到的数据print(req_info)
(5)爬取数据存入csv文件
def file_do(list_info):# 获取文件大小file_size = os.path.getsize(r'G:\lagou_test.csv')if file_size == 0:# 表头name = ['公司','城市','职位','薪资','学历要求','工作经验','职位优点']# 建立DataFrame对象file_test = pd.DataFrame(columns=name, data=list_info)# 数据写入file_test.to_csv(r'G:\lagou_test.csv', encoding='gbk',index=False)else:with open(r'G:\lagou_test.csv','a+',newline='') as file_test :# 追加到文件后面writer = csv.writer(file_test)# 写入文件writer.writerows(list_info)

简单展示一下爬取到的数据

四、来点进阶的(和爬虫无关)

数据分析+pyechart数据可视化
  • 1.薪资分布分析
# 薪资分析,下面的几个都是柱状图,和这个地方分析一样
# 统计各个城市出现次数
salary_lists = {}
for x in city:salary_lists[x] = salary.count(x)
key = []
values = []
for k,v in salary_lists.items():key.append(k)values.append(v)
bar2 = Bar('求职信息数据化','需求量',page_title='薪资分布')
# 图表其他主题:vintage,macarons,infographic,shine,roma
bar2.use_theme('vintage')
bar2.add('薪资',key,values,is_more_utils = True,is_datazoom_show = True,xaxis_interval=0, xaxis_rotate=30, yaxis_rotate=30)
bar2.render()


我们可以看到,python的薪资基本都是10k起步,大部分公司给出薪资在10k-40k之间,所以,不要怕学python吃不到饭。

  • 2.工作地点分析


    通过图表,我们很容易看出,需要python程序员的公司大多分布在北京、上海、深圳,再后面就是广州了,所以,学python的同学千万不要去错城市哦。

  • 3.职位学历要求


    根据图表显示,python程序员的学历要求并不高,主要是本科,虽然学历要求不高,但一定要有思辨能力哦。

  • 4.工作经验要求


    主要是需要3-5年工作经验的同学,不老也不年轻,成熟稳重,又能学新东西的年龄,招聘公司真聪明。

  • 5.工作职位研究方向分析

# 和下面福利关键词的分析差不多,大家可以自己试着写写。


开发,没错是开发,至于具体什么开发,公司面谈吧。哈哈哈~

  • 6.工作福利优点分析
# 福利关键词分析
content = ''
# 连接所有公司福利介绍
for x in positionAdvantage:content = content + x
# 去除多余字符
content = re.sub('[,、(),1234567890;;&%$#@!~_=+]', '', content)
# jieba 切词,pandas、numpy计数
segment = jieba.lcut(content)
words_df = pd.DataFrame({'segment': segment})
words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数": numpy.size})
words_stat = words_stat.reset_index().sort_values(by=["计数"], ascending=False)
test = words_stat.head(1000).values
# 制作词云图
codes = [test[i][0] for i in range(0,len(test))]
counts = [test[i][1] for i in range(0,len(test))]
wordcloud = WordCloud(width=1300, height=620)
wordcloud.add("福利关键词", codes, counts, word_size_range=[20, 100])
wordcloud.render()


很明显,大家都关心的五险一金、团队、氛围、年终奖···都有哈。

1.作为一名python程序员,我打算以后去北京、上海、深圳发展,主要从事开发工作,我学历,emmmm~考个研吧,少走弯路,你呢?留言,留下你未来的工作方向,想去的城市,说不定小编会私聊你给你惊喜哦~
2.本文源代码已经分享到了 码云上,欢迎关注pick,地址:XksA的码云:拉勾网爬虫及数据分析

爬虫实例二:爬取拉勾网招聘信息相关推荐

  1. scrapy爬虫实战(二)-------------爬取IT招聘信息

    主要从智联招聘,51job,周伯通三个网站爬取IT类企业的招聘信息,并按照编程语言和职位数量和平均薪资进行统计,计算. 源代码github地址: https://github.com/happyAng ...

  2. 什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(二)

    文章目录 前言 一.准备我们的库 二.数据清洗 三.核密度图及词云制作 四.完整代码 五.扩展 上一篇:什么你还不知道招聘信息,小唐来教你--最新2021爬取拉勾网招聘信息(一) 下一篇:没有拉! 前 ...

  3. Python爬虫实战之一 - 基于Requests爬取拉勾网招聘信息,并保存至本地csv文件

    Python爬虫实战之二 - 基于Requests抓取拉勾网招聘信息 ---------------readme--------------- 简介:本人产品汪一枚,Python自学数月,对于小白,本 ...

  4. 【python爬虫02】使用Scrapy框架爬取拉勾网招聘信息

    使用Scrapy框架爬取拉勾网招聘信息 最近接触了Scrapy爬虫框架,简单写了个爬虫爬取拉钩网的招聘信息,加深对Scrapy框架的理解,不得不说Scrapy框架其实还是蛮方便的,就像爬虫流水线一样, ...

  5. Python搭建代理池爬取拉勾网招聘信息

    先来看一张图了解下爬虫 实现功能 多线程爬取拉勾网招聘信息 维护代理 ip 池 搭建 node 服务器 Taro 使用 echarts 做数据分析 1.多线程爬取拉勾网招聘信息 Tip:涉及知识 1. ...

  6. 什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(一)

    文章目录 前言 一.准备我们的库 二.分析分析 三. 代码 四.数据展示 小唐的心路历程 上一篇:没有啦! 下一篇:什么你还不知道招聘信息,小唐来教你--最新2021爬取拉勾网招聘信息(二) 前言 有 ...

  7. 2.简单爬虫————爬取拉勾网招聘信息(一)

    该文章仅供学习,如有错误,欢迎指出 1.开始创建一个项目 mkdir lagou 2.进入到文件夹下创建python3的虚拟环境 pipenv install scrapy 3.进入pipenv 下使 ...

  8. 爬取拉勾网招聘信息(招聘岗位,公司名称,薪资等)

    用爬虫框架进行爬取,框架还是feapder 代码如下: import feapder#轻量级爬虫 class LastAirSpider(feapder.AirSpider):def start_ca ...

  9. 什么样的人才能做互联网产品经理【爬取拉勾网招聘信息】

    分析目的 在这个校招如火如荼的季节,相信大家对各种招聘网站已经再熟(yan)悉(fan)不过了,各种java开发.算法.前端.后端岗位真的是琳琅满目,而我觉得其中与我的个人兴趣和专业匹配度最高的就是产 ...

  10. python view函数_Python爬虫实例(二)——爬取新馆疫情每日新增人数

    python是世界上最美的语言. 大家好,我是Henry! 疫情以来,相信大家每天都关注着疫情的实时动态,许多网站上也post了疫情的相关资料. 百香园 百度 各个网站都会统计每日新增,刚学了Matp ...

最新文章

  1. Storm Trident示例function, filter, projection
  2. 2018, 自动驾驶异常艰难的一年
  3. NYOJ72Financial Management
  4. ASP.NET MVC 学习6、学习使用Code First Migrations功能,把Model的更新同步到DB中
  5. linux基础 linhaifeng,Linux基础之命令练习Day2(示例代码)
  6. 重磅!ICDAR 2019-LSVT街景文字识别国际竞赛!奖金丰厚
  7. java.lang.IllegalArgumentException 不合法的参数异常
  8. 软件定制开发的7大好处
  9. 大数据时代能否保证足够的安全
  10. JDK18 Java 18 拥有 9 个新特性
  11. python random 之基础点名器
  12. 博客平台、Markdown编辑器与hexo admin简介
  13. Linux平台下使用AdventNet ManageEngine OpUtils监控网络
  14. RSG.CFS.v8.0.2 1CD(综合性通用冷弯型钢构件设计工具)
  15. xshell 登陆日志_学习关于xshell查看日志
  16. Directx12 曲面细分详解
  17. fighter_zzh_Steam控制器,即将推出Linux的Street Fighter V以及更多开放式游戏新闻
  18. python标点符号换成空格_产品:“这输入框所有标点符号替换成空格!”
  19. 海德上位机软件学习总结(NetScada5.0)
  20. 图像处理之图像的几何变换

热门文章

  1. oracle mod函数
  2. 全球最好听、最值得听的100首英文歌曲。(每首都有下载地址)
  3. wordpress pdf_9个适用于WordPress的最佳PDF插件
  4. 上传文件nginx限制大小解决
  5. PHP基础学习第十四篇(了解和使用PHP的数据类型、常量、字符串变量、运算符)
  6. 爬虫python淘宝_python爬虫爬取淘宝失败原因分析
  7. 商汤科技VS旷视科技VS依图科技(转)
  8. WebMvcConfigurerAdapter已被废弃的解决方法
  9. 魔兽地图编辑器--人物自定义语音的方法和进入游戏自定义语音不能播放的问题
  10. 行列式的计算机应用结题报告,行列式计算开题报告(共10篇).doc