写在前面:开始数据挖掘的学习已有一段时间,由于研究生阶段一直使用C++,代码的熟练度还远远不够,对算法的理解也不够深刻。因此,想要写点东西记录自己学习的过程,希望可以在积累中不断提升自己。

今天写一写最近几天爬取分析拉勾网岗位数据的过程,用到了python数据整理常用的pandas库、可视化操作的matplotlib和seaborn库、爬虫算法常用框架scrapy。

建立爬虫框架

学习scrapy时主要参考了这篇博文:【图文详解】scrapy爬虫与Ajax动态页面——爬取拉勾网职位信息(1)

观察拉勾网网页及源代码发现,结构为主页——职位分类——职位列表——具体职位信息,我们尝试爬取“数据挖掘”分类下的所有职位信息,首先建立爬虫框架:

spiders文件
观察网页地址发现,数据挖掘分类下第一页职位列表的地址为http://www.lagou.com/zhaopin/shujuwajue/1/?labelWords=label,后面的网页只修改了地址中的数字(即页码),其他不变。

class LgjobsSpider(scrapy.Spider):name = "lgjobs"start_urls = ('http://www.lagou.com/zhaopin/shujuwajue/1/?labelWords=label',# 'http://www.lagou.com/',)totalpageCount=1def start_requests(self):return [scrapy.http.FormRequest('http://www.lagou.com/zhaopin/shujuwajue/1/?labelWords=label', callback=self.parse)]

观察职位列表页的源代码和职位详情页的源代码发现,二级网页的源代码更容易提取,包含的信息也更全面,因此选择首先在网页内爬取二级网页的地址,再由二级网页爬取所需的职位信息。

    def parse(self, response):selector = scrapy.Selector(response)next_urls = selector.xpath('//a[@class="position_link"]').extract()for each in next_urls:urls = re.findall(r'href="//(.*?)"', each, re.S)yield scrapy.Request('http://' + urls[0], self.parse_item)self.totalpageCount += 1next_page='http://www.lagou.com/zhaopin/shujuwajue/'+str(self.totalpageCount)+'/?labelWords=label'if self.totalpageCount<31:yield scrapy.Request(next_page, callback=self.parse)def parse_item(self, response):selector = scrapy.Selector(response)skill = selector.xpath('//dd[@class="job_bt"]/p').extract()tf = open('./' + 'datamining.txt', 'w+')for each in skill:res = re.sub('<.*?>', '', each)tf.write(res)tf.close()

修改items.py
我们需要存储的特征信息有:公司名称、薪酬、工作经验、学历、工作城市等,添加函数:

class LagoujobsItem(scrapy.Item):salary=scrapy.Field()city=scrapy.Field()companyFullName=scrapy.Field()jobNature=scrapy.Field()education=scrapy.Field()financeStage=scrapy.Field()positionName=scrapy.Field()createTime=scrapy.Field()positionName=scrapy.Field()pass  

修改settings.py
为了防止爬取数据时访问过于频繁导致IP被封禁,在settings.py中添加代码:

DOWNLOAD_DELAY=1

但是这种方法会严重影响爬虫的速度,并不是很好。

另外,添加数据存入的文件位置:

FEED_URI = u'file:///D://lagouzhaoping.csv'
FEED_FORMAT = 'CSV'

数据清洗

主要利用pandas库的函数进行数据的导入、清洗、转换,下一篇博客将尝试使用MySQL处理数据。

filepath="lagouzhaoping.csv"
df_DM=pd.read_csv(filepath, index_col=None)
df_DM.info()

首先读取csv文件,查看DataFrame的基本信息,结果如下:

education=df_DM['education']
education=pd.DataFrame(education.unique())
# 不限 大专 本科 硕士 博士
df_DM['education'] = df_DM['education'].replace('不限','unlimited')
df_DM['education'] = df_DM['education'].replace('大专','junior')
df_DM['education'] = df_DM['education'].replace('本科','regular')
df_DM['education'] = df_DM['education'].replace('硕士','master')
df_DM['education'] = df_DM['education'].replace('博士','doctor')

由于表格中工作城市、学历要求、经验要求等数据均为中文,后续用seaborn库绘制的时候会发生错误,只能先将中文数据替换成英文,显然过于繁琐,希望可以找到更合适的解决方法。

df_DM['minSalary'] = df_DM['salary'].str.replace('(.{1,})k-(.{1,})k','\\1')
df_DM['maxSalary'] = df_DM['salary'].str.replace('(.{1,})k-(.{1,})k','\\2')
df_DM['minSalary']= df_DM['minSalary'].str.replace('(.{1,})k以上','\\1')
df_DM['maxSalary']= df_DM['maxSalary'].str.replace('(.{1,})k以上','\\1')
df_DM['minSalary']= df_DM['minSalary'].astype(int)
df_DM['maxSalary']= df_DM['maxSalary'].astype(int)df_DM.drop(['salary'], axis=1,inplace=True)

计算平均薪酬

职位信息的可视化分析

这里使用的是强大的seaborn库,用简单的函数就可以绘制出炫酷的图片,关于seaborn库的更多使用信息可以参考:Seaborn: statistical data visualization

学历

import seaborn as sns
sns.set_style('whitegrid')
sns.countplot(x="education", data=df_DM,palette="Greens_d")

工作经验

sns.countplot(x="workYear", data=df_DM,palette="Blues_d")

数据类工作的学历门槛并不高,多数岗位只要求本科以上的学历,但工作经验就非常重要了,社招岗位对应届毕业生非常不友好,要求3-5年或1-3年工作经验的岗位居多。
工作城市

代码为

sns.countplot(x="city", data=df_DM,palette="Blues_d")

比较不同城市的薪酬待遇

代码为

sns.barplot(x="city",y="averageSalary",data=df_DM,palette="Paired")

观察图片发现,在岗位需求量上北京遥遥领先,比上海、杭州、深圳加起来还要多。薪资待遇方面北上深杭当仁不让,这里有一个小问题,由于珠海、福州等城市岗位需求数实际上很小,其薪资不具有代表性,在统计分析时应当指定一个阈值,将岗位数小于该阈值的城市划分为一类。

总结

通过这次简单的分析,不仅练习了爬虫与数据处理的基本功能,同时得出的结论对我这样的小白应届生也是一个很好的参考,了解了岗位需求,才能够更有方向地提升自己。希望在写下一篇博客时,能够完善这次代码中一些不合理的地方。

拉勾网职位数据爬取与分析(一)相关推荐

  1. php爬虫:知乎用户数据爬取和分析

    php爬虫:知乎用户数据爬取和分析 2016-04-10    PHP开发者     (点击上方公众号,可快速关注) 作者:崔小拽        原文链接:http://cuihuan.net/art ...

  2. Python网络数据爬取及分析-智联招聘

    python网络数据爬取及分析-智联招聘 一. 数据爬取 智联招聘是一家面向大型公司和快速发展的中小企业提供一站式专业人力资源的公司,可在智联招聘网站上根据不同城市.不同职位需求搜索得到相关招聘信息. ...

  3. python爬虫实战三:近十年中国电影票房数据爬取与分析

    近十年中国电影票房数据爬取与分析 前言 爬取 分析 十年top10 年度top5 每年电影数 每年总票房 二八原则 代码与数据 前言 这篇文章主要讲述的是近十年(2010-2019)中国电影票房数据的 ...

  4. 2019FME博客大赛——为数据而生的FME - 腾讯人口迁徙数据爬取与分析

    参赛单元:互联网.大数据及云计算 作者:刘啸 单位:上海垣观数据科技有限公司 随着信息技术的发展,大数据的概念越来越引发人们的关注,各种有关于城市的新数据类型也不断涌现,为客观认识城市系统并总结其发展 ...

  5. bilibili助手C2C服务器,Bilibili (B站)200万用户数据爬取与分析(附源码)

    原标题:Bilibili (B站)200万用户数据爬取与分析(附源码) 数据挖掘入门与实战 公众号: datadw 该爬虫仅供学习使用 B站用户爬虫 B站视频爬虫 B站弹幕下载器 关注并回复公众号da ...

  6. 手把手教-网络时空大数据爬取与分析DAS系统(瓦片地图获取)

    手把手教 | 网络时空大数据爬取与分析DAS系统(瓦片地图获取) 原创 DAS Team 双评价DAS 地理计算语言,为大众赋能地理智慧. --DAS Team 爬取分析DAS系统下载 地址: htt ...

  7. 【完整版】2019h1深圳二手楼市热度如何?(数据爬取、分析建模)

    2019h1深圳二手楼市热度如何?(数据爬取.分析&建模) 文章目录 2019h1深圳二手楼市热度如何?(数据爬取.分析&建模) 一.数据爬取 1.1 多进程爬取2w+深圳已成交二手房 ...

  8. 网络爬虫分析实例:基于音悦台网站榜单的数据爬取与分析

    基于音悦台网站榜单的数据爬取与分析 本实验代码:进入 一.研究背景 在互联网发展初期,网站相对较少,信息查找比较容易.然而伴随互联网爆炸性的发展,普通网络用户想找到所需的资料简直如同大海捞针,这时为满 ...

  9. 网络时空大数据爬取与分析DAS系统(街景图片采集与绿视率分析)

    手把手教 | 网络时空大数据爬取与分析DAS系统(街景图片采集与绿视率分析) 原创 DAS Team 双评价DAS 7月2日 地理计算语言,为大众赋能地理智慧. --DAS Team 爬取分析DAS系 ...

最新文章

  1. 数据链路层和传输层可靠传输是否重复多余
  2. numa节点_鲲鹏性能优化十板斧之前言 | 鲲鹏处理器NUMA简介与性能调优五步法
  3. webRTC+coturn穿透服务器的安装与搭建
  4. J2SE综合对java util的总结 一
  5. gettimeofday函数
  6. django 学习 (三) 模板变量
  7. 工具用途_小工具大用途:万能扳手、开瓶器、开箱器,DIY16种用法,玩过吗
  8. Python深层解析json数据之JsonPath
  9. 商城左侧菜单栏网页模板
  10. 7 记账期 012 2021 没有打开
  11. Vuejs 计算属性
  12. 95-136-042-源码-Operator-AbstractUdfStreamOperator
  13. java 服务 容量评估,容器云平台容量规划及管理优化
  14. uniapp 如何给搜索框设值_uni-app 顶部配置搜索框和左右图标
  15. 中国象棋大战 瑞星杀毒软件序列号
  16. ESP8266的AT指令集
  17. 日志分析软件 Splunk
  18. linux修改时区为UTC
  19. python文件的运行方法
  20. 逍遥模拟器上传服务器文件,逍遥模拟器后台操作

热门文章

  1. 【程序设计】Java基本语法练习题
  2. 博士毕业论文英文参考文献换行_毕业论文注释及英文参考文献需翻成中文吗?...
  3. zabbix php问题 Call to undefined function array_column()
  4. 输入【ionic start myApp tabs】命令创建项目时失败
  5. 今日头条这么火,主要解决了用户的哪些基本痛点
  6. Nexperia |超低电容 ESD 保护二极管保护汽车数据接口基础半导体器件
  7. HTML(HBuilder)作业题4- 隔行换色(jquery)
  8. Oracle 数据库表中已有重复数据添加唯一键(唯一约束)
  9. 2022年制冷与空调设备运行操作最新解析及制冷与空调设备运行操作作业考试题库
  10. 华师大 OJ 2822