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应用库大全总结
May 30 Python
对pandas中to_dict的用法详解
Jun 05 Python
python pandas 对时间序列文件处理的实例
Jun 22 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
python处理multipart/form-data的请求方法
Dec 26 Python
Python I/O与进程的详细讲解
Mar 08 Python
Python计算一个点到所有点的欧式距离实现方法
Jul 04 Python
使用tensorflow进行音乐类型的分类
Aug 14 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
Python3如何在服务器打印资产信息
Aug 27 Python
python3.7.3版本和django2.2.3版本是否可以兼容
Sep 01 Python
PyQt5通过信号实现MVC的示例
Feb 06 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学习笔记之 函数声明(二)
2011/06/09 PHP
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
非常漂亮的JS代码经典广告
2007/10/21 Javascript
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
基于jquery的气泡提示效果
2010/05/31 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
包装类的功能、种类、常用方法
2012/01/27 面试题
人事主管岗位职责范本
2013/12/04 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
干部考核工作总结2015
2015/07/24 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
导游词之长城八达岭
2019/09/24 职场文书
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS