python爬取拉勾网职位数据的方法


Posted in Python onJanuary 24, 2018

今天写的这篇文章是关于python爬虫简单的一个使用,选取的爬取对象是著名的招聘网站——拉钩网,由于和大家的职业息息相关,所以爬取拉钩的数据进行分析,对于职业规划和求职时的信息提供有很大的帮助。

完成的效果

  爬取数据只是第一步,怎样使用和分析数据也是一大重点,当然这不是本次博客的目的,由于本次只是一个上手的爬虫程序,所以我们的最终目的只是爬取到拉钩网的职位信息,然后保存到Mysql数据库中。最后中的效果示意图如下:

python爬取拉勾网职位数据的方法 

控制台输入

python爬取拉勾网职位数据的方法 

数据库显示

准备工作

  首先需要安装python,这个网上已经有很多的教程了,这里就默认已经安装python,博主使用的是python3.6,然后安装了requests、pymysql(连接数据库使用)和Mysql数据库。

分析拉勾网

  首先我们打开拉勾网,打开控制台,搜索java关键词搜索职位,选取北京地区,然后查看network一栏中的数据分析,查看第一个,是不是感觉它很像我们要拿到的请求地址,事实上不是的,这个打开之后是一个html,如果我们访问这个接口,拉钩会返回给我们一个结果,提示我们操作太频繁,也就是被拦截了。不过从这个页面可以看到,拉钩的网页用到了模板,这种加载数据的方式更加快速(大幅度提升),建议大家可以尝试使用一下(个人拙见)

python爬取拉勾网职位数据的方法 

不要气馁,我们接着往下找,可以看到一个“positionAjax”开头的请求,没错就它“ https://www.lagou.com/jobs/positionAjax.jsonpx=default&city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false&isSchoolJob=0 ”,还是看图说话吧

python爬取拉勾网职位数据的方法 

找到请求地址之后,我们就开始写代码了。

先是导入requests和pymysql,然后requests的post方法访问上面找到的url,但是直接访问这个地址是会被拦截的,因为我们缺少所要传输的数据,和设置请求头,会被认为是非自然人请求的,加入请求头和数据,

headers = {'Referer':'https://www.lagou.com/jobs/list_'+position+'?city=%E5%8C%97%E4%BA%AC&cl=false&fromSearch=true&labelWords=&suginput=',    'Origin':'https://www.lagou.com',    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
    'Accept':'application/json, text/javascript, */*; q=0.01',
    'Cookie':'JSESSIONID=ABAAABAAAGFABEFE8A2337F3BAF09DBCC0A8594ED74C6C0; user_trace_token=20180122215242-849e2a04-ff7b-11e7-a5c6-5254005c3644; LGUID=20180122215242-849e3549-ff7b-11e7-a5c6-5254005c3644; index_location_city=%E5%8C%97%E4%BA%AC; _gat=1; TG-TRACK-CODE=index_navigation; _gid=GA1.2.1188502030.1516629163; _ga=GA1.2.667506246.1516629163; LGSID=20180122215242-849e3278-ff7b-11e7-a5c6-5254005c3644; LGRID=20180122230310-5c6292b3-ff85-11e7-a5d5-5254005c3644; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1516629163,1516629182; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1516633389; SEARCH_ID=8d3793ec834f4b0e8e680572b83eb968'
    }
 dates={'first':'true',
   'pn': page,#页数
   'kd': position#搜索的职位
 }

加入请求头之后就可以请求了,控制台输出数据,可以看出是一个json数据,使用json方法处理之后,一步步找到我们想要的数据,可以看出全在“result”里面,那么我们就只拿到他就行了,

result=resp.json()['content']['positionResult']['result']

这个时候可以看到数据非常多,有30个左右,不过不用担心,都是英文单词,基本上可以才出意思。接下来我们就要怕这些数据存储到数据库中,以备日后分析使用。

连接mysql我使用的是pymysql,先建好数据库和数据表,然后在代码中加入配置信息

config={
 "host":"127.0.0.1",
 "user":"root",
 "password":"",
 "database":databaseName,
 "charset":"utf8"#防止中文乱码
}

加载配置文件,连接数据库

db = pymysql.connect(**config)
cursor = db.cursor()
sql=""#insert语句
cursor.execute()
db.commit() #提交数据
cursor.close()
db.close()#用完记得关闭连接

大功告成,这个时候拉钩的职位信息已经静静地躺在了你的数据库中,静待你的宠幸,拿到这些数据,你就可以进行一些分析了,比如平均工资水平、职位技能要求等。

因为篇幅有限,有些代码并没有粘贴出来,比如sql语句(这个sql写的挺长的),但是别担心,楼主已经把这个程序放入到github上面了,大家可以自行下载,github地址:https://github.com/wudb1993/pythonDemo如果觉得不错的话请在github上面点一下star,手打不易谢谢啦,欢迎大神拍砖。

总结

以上所述是小编给大家介绍的python爬取拉勾网职位数据的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
轻松掌握python设计模式之策略模式
Nov 18 Python
浅谈pandas中shift和diff函数关系
Apr 08 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
python正则表达式之对号入座篇
Jul 24 Python
django orm 通过related_name反向查询的方法
Dec 15 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
Jan 23 Python
python turtle 绘制太极图的实例
Dec 18 Python
Python调用scp向服务器上传文件示例
Dec 22 Python
Python动态导入模块和反射机制详解
Feb 18 Python
Python 忽略文件名编码的方法
Aug 01 Python
python 密码学示例——凯撒密码的实现
Sep 21 Python
Python  lambda匿名函数和三元运算符
Apr 19 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 #Python
Python实现的生成格雷码功能示例
Jan 24 #Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 #Python
Python3结合Dlib实现人脸识别和剪切
Jan 24 #Python
深入浅析Python中的yield关键字
Jan 24 #Python
Python3.6安装及引入Requests库的实现方法
Jan 24 #Python
pycharm+django创建一个搜索网页实例代码
Jan 24 #Python
You might like
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
用js遍历 table的脚本
2008/07/23 Javascript
DWR Ext 加载数据
2009/03/22 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
Python修改Excel数据的实例代码
2013/11/01 Python
深入解读Python解析XML的几种方式
2016/02/16 Python
python 捕获shell脚本的输出结果实例
2017/01/04 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
波兰在线运动商店:YesSport
2020/07/23 全球购物
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
统计员岗位职责
2013/11/14 职场文书
会计工作心得体会
2014/01/13 职场文书
亲属关系公证书
2014/04/08 职场文书
4s店活动策划方案
2014/08/25 职场文书
车间主任岗位职责
2015/02/03 职场文书
教师节大会主持词
2015/07/06 职场文书
如何写通讯稿
2015/07/22 职场文书
导游词之吉林花园山
2019/10/17 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL