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

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

欢迎关注天善智能 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返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值