爬虫实例二:爬取拉勾网招聘信息
爬虫实例二:爬取拉勾网招聘信息
如果是第一次看本教程的同学,可以先从一开始:
爬虫实例一:爬取豆瓣影评
欢迎关注微信公众号:极简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的码云:拉勾网爬虫及数据分析
爬虫实例二:爬取拉勾网招聘信息相关推荐
- scrapy爬虫实战(二)-------------爬取IT招聘信息
主要从智联招聘,51job,周伯通三个网站爬取IT类企业的招聘信息,并按照编程语言和职位数量和平均薪资进行统计,计算. 源代码github地址: https://github.com/happyAng ...
- 什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(二)
文章目录 前言 一.准备我们的库 二.数据清洗 三.核密度图及词云制作 四.完整代码 五.扩展 上一篇:什么你还不知道招聘信息,小唐来教你--最新2021爬取拉勾网招聘信息(一) 下一篇:没有拉! 前 ...
- Python爬虫实战之一 - 基于Requests爬取拉勾网招聘信息,并保存至本地csv文件
Python爬虫实战之二 - 基于Requests抓取拉勾网招聘信息 ---------------readme--------------- 简介:本人产品汪一枚,Python自学数月,对于小白,本 ...
- 【python爬虫02】使用Scrapy框架爬取拉勾网招聘信息
使用Scrapy框架爬取拉勾网招聘信息 最近接触了Scrapy爬虫框架,简单写了个爬虫爬取拉钩网的招聘信息,加深对Scrapy框架的理解,不得不说Scrapy框架其实还是蛮方便的,就像爬虫流水线一样, ...
- Python搭建代理池爬取拉勾网招聘信息
先来看一张图了解下爬虫 实现功能 多线程爬取拉勾网招聘信息 维护代理 ip 池 搭建 node 服务器 Taro 使用 echarts 做数据分析 1.多线程爬取拉勾网招聘信息 Tip:涉及知识 1. ...
- 什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(一)
文章目录 前言 一.准备我们的库 二.分析分析 三. 代码 四.数据展示 小唐的心路历程 上一篇:没有啦! 下一篇:什么你还不知道招聘信息,小唐来教你--最新2021爬取拉勾网招聘信息(二) 前言 有 ...
- 2.简单爬虫————爬取拉勾网招聘信息(一)
该文章仅供学习,如有错误,欢迎指出 1.开始创建一个项目 mkdir lagou 2.进入到文件夹下创建python3的虚拟环境 pipenv install scrapy 3.进入pipenv 下使 ...
- 爬取拉勾网招聘信息(招聘岗位,公司名称,薪资等)
用爬虫框架进行爬取,框架还是feapder 代码如下: import feapder#轻量级爬虫 class LastAirSpider(feapder.AirSpider):def start_ca ...
- 什么样的人才能做互联网产品经理【爬取拉勾网招聘信息】
分析目的 在这个校招如火如荼的季节,相信大家对各种招聘网站已经再熟(yan)悉(fan)不过了,各种java开发.算法.前端.后端岗位真的是琳琅满目,而我觉得其中与我的个人兴趣和专业匹配度最高的就是产 ...
- python view函数_Python爬虫实例(二)——爬取新馆疫情每日新增人数
python是世界上最美的语言. 大家好,我是Henry! 疫情以来,相信大家每天都关注着疫情的实时动态,许多网站上也post了疫情的相关资料. 百香园 百度 各个网站都会统计每日新增,刚学了Matp ...
最新文章
- Storm Trident示例function, filter, projection
- 2018, 自动驾驶异常艰难的一年
- NYOJ72Financial Management
- ASP.NET MVC 学习6、学习使用Code First Migrations功能,把Model的更新同步到DB中
- linux基础 linhaifeng,Linux基础之命令练习Day2(示例代码)
- 重磅!ICDAR 2019-LSVT街景文字识别国际竞赛!奖金丰厚
- java.lang.IllegalArgumentException 不合法的参数异常
- 软件定制开发的7大好处
- 大数据时代能否保证足够的安全
- JDK18 Java 18 拥有 9 个新特性
- python random 之基础点名器
- 博客平台、Markdown编辑器与hexo admin简介
- Linux平台下使用AdventNet ManageEngine OpUtils监控网络
- RSG.CFS.v8.0.2 1CD(综合性通用冷弯型钢构件设计工具)
- xshell 登陆日志_学习关于xshell查看日志
- Directx12 曲面细分详解
- fighter_zzh_Steam控制器,即将推出Linux的Street Fighter V以及更多开放式游戏新闻
- python标点符号换成空格_产品:“这输入框所有标点符号替换成空格!”
- 海德上位机软件学习总结(NetScada5.0)
- 图像处理之图像的几何变换
热门文章
- oracle mod函数
- 全球最好听、最值得听的100首英文歌曲。(每首都有下载地址)
- wordpress pdf_9个适用于WordPress的最佳PDF插件
- 上传文件nginx限制大小解决
- PHP基础学习第十四篇(了解和使用PHP的数据类型、常量、字符串变量、运算符)
- 爬虫python淘宝_python爬虫爬取淘宝失败原因分析
- 商汤科技VS旷视科技VS依图科技(转)
- WebMvcConfigurerAdapter已被废弃的解决方法
- 魔兽地图编辑器--人物自定义语音的方法和进入游戏自定义语音不能播放的问题
- 行列式的计算机应用结题报告,行列式计算开题报告(共10篇).doc