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 相关文章推荐
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
Python实现定时任务
Feb 08 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
kaggle+mnist实现手写字体识别
Jul 26 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
django rest framework vue 实现用户登录详解
Jul 29 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 Python
Django程序的优化技巧
Apr 29 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 zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
让您的菜单不离网站
2006/10/03 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
JavaScript原型链示例分享
2014/01/26 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
jQuery实现每隔几条元素增加1条线的方法
2016/06/27 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
js实现前端图片上传即时预览功能
2017/08/02 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
vue中导出Excel表格的实现代码
2018/10/18 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
vue+element表格导出为Excel文件
2019/09/26 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
跟老齐学Python之Import 模块
2014/10/13 Python
Python查看微信撤回消息代码
2018/06/07 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
个人自我评价和职业目标
2014/01/24 职场文书
高中军训感言400字
2014/02/24 职场文书
学用政策心得体会
2014/09/10 职场文书
电工实训报告总结
2014/11/05 职场文书
万里长城导游词
2015/01/30 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
Ruby处理YAML和json数据
2022/04/18 Ruby