一、前言

最近想做一份关于拉勾网数据分析类职业的报告,便顺手写了个简单的爬虫,记录分享如下。

二、思路整理

1、首先我们打开拉勾网,并搜索“”数据分析“”,显示出来的职位便是我们的目标

2、接下来我们需要确定,怎样将信息提取出来

(1)查看页面源代码,这时候发现,页面源码里面找不到职位相关信息,这证明拉勾网关于职位的信息是异步加载的,这也是一种很常用的技术

(2)异步加载的信息,我们需要借助chrome浏览器的小工具进行分析,按F12即可打开,界面如下:

(3)点击Nerwork进入网络分析界面,这时候是一片空白,刷新一下界面就可以看到一系列的网络请求了

(4)前面我们说到,拉勾网关于职位的信息是异步加载的,那么必定在这一系列的网络请求中,有某个请求发送到了服务器的接口处,响应职位信息。

(5)正常我们可以忽略css,png等类型的请求,关注点放在xhr这种类型请求上,如下:

(6)上图发现了两个xhr请求,从字面意思看很有可能是我们需要的信息,右键点击在另一个界面打开

(7)我们对比一下,上图显示的信息便是我们所要的职位信息,可以用json工具检验一下,更加直观

(8)之后再查看请求发送参数列表,到这里我们可以肯定city参数便是城市,pn参数便是页数,kd参数便是职位关键字

(9)思路分析到此结束了,接下来是代码了

三、代码

爬虫我按自己的习惯分成了四个部分,便于后期维护

1、基本https请求--https.py

这部分对requests包进行了一些封装,部分代码如下,完成post请求

    def post(self,url, para, headers=None, cookies=None, proxy=None, timeOut=5, timeOutRetry=5):'''post获取响应url: 目标链接para: 参数headers: headerscookies: cookiesproxy: 代理timeOut: 请求超时时间timeOutRetry: 超时重试次数return: 响应'''if not url or not para:logging.error('PostError url or para not exit')return Nonelogging.error('Post %s' % url)try:if not headers:headers = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3'}response = requests.post(url, data=para, headers=headers, cookies=cookies, proxies=proxy, timeout=timeOut)if response.status_code == 200 or response.status_code == 302:htmlCode = response.textelse:htmlCode = Nonelogging.error('Post %s %s' % (str(response.status_code), url))except Exception as e:logging.error('PostExcept %s' % str(e))if timeOutRetry > 0:htmlCode = self.post(url=url, para=para, timeOutRetry=(timeOutRetry-1))else:logging.error('PostTimeOut %s' % url)htmlCode = Nonereturn htmlCode

2、代码主逻辑部分--manage.py

这部分是程序逻辑,如下:

(1)获取职位信息

url = 'https://www.lagou.com/jobs/positionAjax.json'
para = {'first': 'true','pn': '1', 'kd': kd, 'city': city}
def getInfo(url, para):"""获取信息"""generalHttp = Http()htmlCode = generalHttp.post(url, para=para, headers=hd, cookies=ck)generalParse = Parse(htmlCode)pageCount = generalParse.parsePage()info = []for i in range(1, pageCount+1):print('第%s页' % i)para['pn'] = str(i)htmlCode = generalHttp.post(url, para=para, headers=hd, cookies=ck)generalParse = Parse(htmlCode)info = info + getInfoDetail(generalParse)time.sleep(2)return info

(2)对信息进行储存

def processInfo(info, para):"""信息存储"""logging.error('Process start')try:title = 'companyName,companyType,companyStage,companyLabel,companySize,companyDistrict,' \'positionType,positionEducation,positionAdvantage,positionSalary,positionWorkYear\n'file = open('%s.txt' % para['city'], 'a')file.write(title)for p in info:line = str(p['companyName']) + ',' + str(p['companyType']) + ',' + str(p['companyStage']) + ',' + \str(p['companyLabel']) + ',' + str(p['companySize']) + ',' + str(p['companyDistrict']) + ',' + \str(p['positionType']) + ',' + str(p['positionEducation']) + ',' + str(p['positionAdvantage']) + ',' +\str(p['positionSalary']) + ',' + str(p['positionWorkYear']) + '\n'file.write(line)file.close()return Trueexcept:logging.error('Process except')return None

3、具体信息解析部分--parse.py

这部分针对服务器返回得职位信息特点,进行解析,如下:

    def parsePage(self):'''解析并计算页面数量:return: 页面数量'''totalCount = self.json['content']['positionResult']['totalCount']      #职位总数量resultSize = self.json['content']['positionResult']['resultSize']      #每一页显示的数量pageCount = int(totalCount) // int(resultSize) + 1          #页面数量return pageCountdef parseInfo(self):'''解析信息'''info = []for position in self.json['content']['positionResult']['result']:i = {}i['companyName'] = position['companyFullName']i['companyDistrict'] = position['district']i['companyLabel'] = position['companyLabelList']i['companySize'] = position['companySize']i['companyStage'] = position['financeStage']i['companyType'] = position['industryField']i['positionType'] = position['firstType']i['positionEducation'] = position['education']i['positionAdvantage'] = position['positionAdvantage']i['positionSalary'] = position['salary']i['positionWorkYear'] = position['workYear']info.append(i)return info

4、配置部分--setting.py

这部分加入cookies的原因是为了应对拉勾网的反爬,长期使用需要进行改进,进行动态cookies获取

#HEADER
headers = {'content-type': 'application/x-www-form-urlencoded; charset=UTF-8','Accept-Encoding': 'gzip, deflate','Host': 'www.lagou.com','Origin': 'http://www.lagou.com','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36','X-Requested-With': 'XMLHttpRequest','Referer': 'http://www.lagou.com','Proxy-Connection': 'keep-alive','X-Anit-Forge-Code': '0','X-Anit-Forge-Token': None}#COOKIES
cookies = {'JSESSIONID': '99021FFD6F8EC6B6CD209754427DEA93','_gat': '1','user_trace_token': '20170203041008-9835aec2-e983-11e6-8a36-525400f775ce','PRE_UTM': '','PRE_HOST': '','PRE_SITE': '','PRE_LAND': 'https%3A%2F%2Fwww.lagou.com%2Fzhaopin%2F','LGUID': '20170203041008-9835b1c9-e983-11e6-8a36-525400f775ce','SEARCH_ID': 'bfed7faa3a0244cc8dc1bb361f0e8e35','Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6': '1486066203','Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6': '1486066567','_ga': 'GA1.2.2003702965.1486066203','LGSID': '20170203041008-9835b03a-e983-11e6-8a36-525400f775ce','LGRID': '20170203041612-714b1ea3-e984-11e6-8a36-525400f775ce'}

5、代码基本如上

四、测试

我这里只对广州及深圳的数据分析岗位进行爬虫,如下:


接下来在项目目录下,便可以看到两个城市的职位信息:

关于拉勾网的职位信息抓取到这里就完成了,具体代码可以在我的github上找到:https://github.com/lpty/crawl_tutorial

注意:本项目代码仅作学术交流使用

python爬虫爬取拉勾网职业信息相关推荐

  1. java爬虫拉勾网_[Java教程]node.js爬虫爬取拉勾网职位信息

    [Java教程]node.js爬虫爬取拉勾网职位信息 0 2017-03-14 00:00:21 简介 用node.js写了一个简单的小爬虫,用来爬取拉勾网上的招聘信息,共爬取了北京.上海.广州.深圳 ...

  2. 深圳python爬虫培训南山科技园钽电容回收_记一次python 爬虫爬取深圳租房信息的过程及遇到的问题...

    为了分析深圳市所有长租.短租公寓的信息,爬取了某租房公寓网站上深圳区域所有在租公寓信息,以下记录了爬取过程以及爬取过程中遇到的问题: 爬取代码: import requests from reques ...

  3. python解决租房问题_记一次python 爬虫爬取深圳租房信息的过程及遇到的问题

    为了分析深圳市所有长租.短租公寓的信息,爬取了某租房公寓网站上深圳区域所有在租公寓信息,以下记录了爬取过程以及爬取过程中遇到的问题: 爬取代码: import requests from reques ...

  4. python爬虫: 爬取拉勾网职位并分析

    文章目录 0. 前言 1. 用到的软件包 2. 解析网页 3. 数据清洗 4. 词云 5. 描述统计 6. 实证统计 7. 完整代码 7.1 爬虫部分的代码 7.2 数据分析部分的代码 0. 前言 本 ...

  5. python爬虫爬取豆瓣电影信息城市_Python爬虫入门 | 2 爬取豆瓣电影信息

    这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...

  6. python爬虫爬取豆瓣电影信息城市_python爬虫,爬取豆瓣电影信息

    hhhhh开心,搞了一整天,查了不少python基础资料,终于完成了第一个最简单的爬虫:爬取了豆瓣top250电影的名字.评分.评分人数以及短评. 代码实现如下:#第一个最简单的爬虫 #爬取了豆瓣to ...

  7. 高温来袭?通过python爬虫爬取天气预警信息

    需求分析 最近一段时间,天气也是越来越热了,真正的进入了夏天了.可怕的故事是,现在才只有6月份呢,要是等到了7,8月份,不会是要更热吧? 一个小伙伴对此也深表赞同,"仙草哥哥,现在天气的温度 ...

  8. Python爬虫-爬取豆瓣出版社信息

    爬取豆瓣出版社信息 代码如下: # 爬取豆瓣出版社 import urllib.request import reurl = 'https://read.douban.com/provider/all ...

  9. 简单的python爬虫--爬取Taobao淘女郎信息

    最近在学Python的爬虫,顺便就练习了一下爬取淘宝上的淘女郎信息:手法简单,由于淘宝网站本上做了很多的防爬措施,应此效果不太好! 爬虫的入口:https://mm.taobao.com/json/r ...

最新文章

  1. 关于(警告: No configuration found for the specified action)解决方案
  2. ActiveX中添加对话框并显示
  3. Gitee ssh 公钥配置好后,仍然 permission denied 的排查过程及解决方法
  4. 印记博客IBO博客系统 v2.0.2源码
  5. 这里是武汉(1)——汉阳造文化创意产业园
  6. Windows环境下通过lynx查看隐藏链接识别黑链方法
  7. 软件需求文档模板及说明
  8. 为什么C语言执行后不会出现小数点,C语言教材第2章要点S.doc
  9. 计算机cf编程,警察牧马人宏自定义编程计算机游戏鼠标有线大声笑/ cf英雄联盟光速质量保证....
  10. 360杀毒软件安装在windows2003系统的解决方法
  11. linux流量监控php_linux下的几个网络流量监控工具使用的图文教程
  12. 二维码门禁助力于打造更智能化的出入管理-码上开门,说走就走
  13. win10 开 5g 热点
  14. android项目小说阅读开发背景颜色,Android 小说阅读护眼模式
  15. OCR API身份证查验的原理
  16. python课程设计——单项选择标准化考试
  17. win10系统连打印机服务器中,win10连不上打印机怎么回事_win10系统连接不上打印机如何解决...
  18. 润和软件推出HarmonyOS物联网系列模组Neptune,助力Harmony生态
  19. 房屋中介信息管理平台
  20. pki与其他人交流时的 机密性 完整性 身份验证 的整个过程

热门文章

  1. 计算机研究生刚上岸,深度学习方向,想要就业的话,应该如何规划研究生三年?...
  2. SuperVideo,一款直播,点播,投屏并有的app
  3. DC综合脚本中文详细解释
  4. 最新SWAPIDC模板源码分享
  5. DropWizard入门实践
  6. TCP/IP协议 | 四层模型
  7. Composer入门教程 - 基本用法
  8. 在线语音识别和离线语音识别哪个好
  9. 嵌入式面试题(五、Linux操作系统)
  10. 对于拓扑空间的一些理解