原标题:爬虫小实例-拉勾网数据分析岗位

欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习、问答、求职,一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

周末没事,想看看最近的职位招聘情况,就用拉勾网为例,练习下爬虫 1.分析

首先去拉勾网的主页去观察下,

当前的搜索页面URL:

观察下源码,发现结构很清晰,解析起来应该很方便,再通过下一页去遍历即可

通过上面的,我们直接去解析应该是足够了,我们再看下他的请求信息,会找到这样一个post,

很明显,这个pn应该就是页码(多查询几次观察下可以确认)

这个应该就是查询的请求,看看结果集,就是我们想要的数据

所以,如果我们直接去请求json数据,然后解析下就行了 2. 要注意的小问题

写的时候,主要遇到几个问题,

2.1 直接请求的话,不行,会被拦截,关于拉勾网,网上的例子很多,这里测试的时候,只要加上header就行了,其他的不需要 headers = {

'User-Agent':

r'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0',

'Referer':

r'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?labelWords=&fromSearch=true&suginput',

'Host':

'www.lagou.com' }

2.2 json的结果集中,有总条数和每页条数,根据这2点,我们可以算出总页数

2.3 解析json就行了

2.4 在 循环的时候,sleep了5秒,因为一直查询偶尔会报错,估计是被拦截了 3.代码

下面分享下,第一版代码,后面再优化:

# -*- coding: utf-8 -*-

"""Created on Sat Aug 19 15:22:20 2017@author: yuguiyang"""

import urllib

import json

import math

import csv

import time

import os total_page =

1 current_page =

1

#更新结果集的总页数

defupdate_total_page(page_size,totalCount):

global total_page total_page = math.ceil(totalCount/page_size)

#解析HTML页面

defparse_html(url,headers,post_data): post_data = urllib.parse.urlencode(post_data).encode(

'utf-8') req = urllib.request.Request(url,headers=headers,data=post_data) page = urllib.request.urlopen(req)

return page.read().decode(

'utf-8')

#解析返回的json数据

defparse_result(html): data_json = json.loads(html) print(data_json[

'content'][

'pageNo'])

#第一页的话,更新下总页数

if data_json[

'content'][

'pageNo'] ==

1 : update_total_page(data_json[

'content'][

'pageSize'],data_json[

'content'][

'positionResult'][

'totalCount'])

#将结果保存到csv文件

with open(

'lagou_shujufenxi_data.csv',

'a',newline=

'',encoding=

'utf-8')

as csvfile: csv_writer = csv.writer(csvfile,quotechar=

'"',quoting=csv.QUOTE_MINIMAL)

#在第一页的时候,写入标题

if data_json[

'content'][

'pageNo'] ==

1 : csv_writer.writerow([

'公司简称',

'公司全称',

'所属行业',

'工作地点',

'职位特点',

'薪资',

'经验',

'职位名称',

'firstType',

'secondType'])

#遍历招聘信息

for job

in data_json[

'content'][

'positionResult'][

'result']: line = [] line.append(job[

'companyShortName']) line.append(job[

'companyFullName']) line.append(job[

'industryField']) line.append(job[

'district']) line.append(job[

'positionAdvantage']) line.append(job[

'salary']) line.append(job[

'workYear']) line.append(job[

'positionName']) line.append(job[

'firstType']) line.append(job[

'secondType']) csv_writer.writerow(line)

defmain(): headers = {

'User-Agent':

r'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0',

'Referer':

r'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?labelWords=&fromSearch=true&suginput',

'Host':

'www.lagou.com' } url =

'https://www.lagou.com/jobs/positionAjax.json'

#判断要导出的文件是否存在

if os.path.exists(

r'lagou_shujufenxi_data.csv'): print(

'hey,delete the file') os.remove(

r'lagou_shujufenxi_data.csv')

#循环所有页数,取导出数据

while current_page <= total_page:

#post参数,每次修改页码就行了 post_data = {

'city':

'上海',

'isSchoolJob':

'0',

'needAddtionalResult':

'false',

'kd':

'数据分析',

'pn':current_page}

#解析每一个页面 html = parse_html(url ,headers, post_data)

#处理获取的json数据 parse_result(html)

#当前页码加1 current_page +=

1

#这里sleep5秒,不停一下,偶尔会报错 time.sleep(

5)

if __name__==

'__main__': main()

天善学院svip包含Excel BI、Python爬虫案例、Python机器学习、Python数据科学家、大数据、数据分析报告、数据分析师体系、深度学习、R语言案例10套课程火爆报名中,欢迎大家关注 www.hellobi.com/svip

转载请保留以下内容:

本文来源自天善社区liutangwow老师的博客(公众号)。

原文链接:https://ask.hellobi.com/blog/yuguiyang1990/9444返回搜狐,查看更多

责任编辑:

基于python爬虫的岗位数据分析以拉勾网为例_爬虫小实例-拉勾网数据分析岗位...相关推荐

  1. 计算机数据分析专业高中小三门,2017高考小三门竞争数据分析【高中家长必读】...

    2017高考小三门竞争数据分析[高中家长必读] 这个图表从何而来,请看下文分解! 小p老师将从今年高考数据以及多年教学经历中对各高中特别是市重点学情的了解出发,给大家做一份详尽的解读报告.如果有任何看 ...

  2. 基于python和amap(高德地图)web api的爬虫,用于搜索某POI点

    目的: 通过Python实现的爬虫技术,及高德地图提供的web api,来获取地图上的POI点及其相关信息 方法: 1.通过Python的urllib模块来处理网络请求和响应,向高德地图发送请求,并接 ...

  3. 基于python的MODIS数据质量控制------以MOD11A1为例

    MODIS质量控制文件,对MODIS产品进行提取 MODIS数据简介 我们拿到的MODIS数据,多数人认为只要有值的地方,就是准确数据,我们直接就可以拿来使用,只有空值的区域,数据才会异常(多数本科生 ...

  4. python基于值的自动内存管理方式是什么_Python采用的是基于值得自动内存管理方式。(2.0分)_学小易找答案...

    [多选题]下列有关关键绩效指标表述正确的是( ) [单选题]上级和员工之间以持续沟通来预防和解决员工实现绩效时可能发生的各种问题的过程,这是绩效管理的( )环节 [单选题]下列有关双因素理论的描述中, ...

  5. python爬取58同城房子发布的手机号码_爬虫(成都58同城所有房价,Python实现)

    Python实现爬虫(爬取58同城所有房价) 程序发布日期2018-9-25(如果以后不能使用了,就需要更改解析方式.) github博客传送门 csdn博客传送门 爬虫文件(Python实现)-爬取 ...

  6. python爬取ajax动态内容肯德基门店_爬虫爬取国内肯德基门店信息

    预期效果 爬取每个城市(300+城市)所有的肯德基门店信息,保存到excel中,效果如下: 代码实现 import requests import csv import json def getDat ...

  7. 编写python手机充值代码_基于Python的天聚人合加油卡充值接口调用代码实例

    一.接口申请开通 本代码是基于天聚人合的话费充值API实现的话费充值功能,使用前需要: 通过https://www.tianjurenhe.com/docs/api/?id=1申请开通话费接口服务. ...

  8. python如何校验页面元素是否加载完毕_爬虫(八十七)等待页面加载完成(Waits)...

    现在的大多数的Web应用程序是使用Ajax技术.当一个页面被加载到浏览器时, 该页面内的元素可以在不同的时间点被加载.这使得定位元素变得困难, 如果元素不再页面之中,会抛出 ElementNotVis ...

  9. python爬虫json数据解析错误是什么意思_爬虫12306返回数据怎么解析

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我得到的是这样的,怎么处理 {'status': True, 'validateMessagesShowId': '_validatorMessage', ...

最新文章

  1. 什么猫咪最受欢迎?Python爬取全网猫咪图片,哪一款是你最爱的
  2. 理解JSON.stringify()高级用法
  3. 【联邦学习】FATE 集群部署 step2
  4. Windows平台下安装Hadoop
  5. 对“相亲节目整风”的看法
  6. 牛客 牛牛的独特子序列(双指针/二分查找)
  7. MongoDB 查询文档
  8. 做工程为什么不用python_为什么“python setup.py sdist”在项目根目录中创建不需要的“PROJECT-egg.info”?...
  9. 2020年接近尾声,我选择来鲲鹏开发者技术峰会学点干货!
  10. CString类常用方法(转载)
  11. tomcat应用服务器有哪些,2014年最流行的应用服务器排行榜 Tomcat第一
  12. MySQL 5.6内存占用过高解决方案
  13. Linux内核中增加一个新的驱动模块
  14. Python爬虫采集网易云音乐热评实战
  15. 【ClearCase使用】之图解merge
  16. Delta并联机构重力补偿分析
  17. 安装Linux系统不分区的问题,浅谈linux系统的分区问题
  18. python爬虫的意义_爬虫的意义与爬虫基本流程
  19. 将一个对象转换成数组
  20. 你还在靠“喂喂喂”来测语音通话质量吗,看完这篇文章你就能掌握正确姿势。

热门文章

  1. 手机端怎么把PDF格式文件转换成图片
  2. CloudFlare Workers 设置使用自定义域名
  3. 发运确认后,订单行保持“已挑库”状态 Order Line Remains in Picked (Awaiting Shipping) Status After Ship Confirmation
  4. Fortify扫描漏洞解决方案
  5. 编译原理 --- 语法分析概念,自上而下分析面临的问题以及如何消除左递归问题
  6. android wms各个类的作用,Android系统服务 —— WMS
  7. ArcGIS基础知识之shape文件的构成
  8. 安装elasticsearch后,本地访问不了
  9. JTAG-SWD转接
  10. VBS实现的日程提醒小工具