scrapy爬取智联招聘、boss直聘、前程无忧互联网招聘信息保存到数据库mysql,用pandas画图展示结果
目的:
我在沈阳,东北的软件环境不太好,想换个城市,但是获取不到对不同城市的软件环境的定量分析,所以写个爬虫爬取各招聘网站上不同城市、不同行业的招聘信息,做一个定量的比较,为制定下一步计划提供一些数据支持。主要分析不同城市不同行业的岗位数量情况和薪资情况。由于各种原因的存在,很难验证所得出的结论与实际的贴合度,仅供参考。
概述:
每个网站爬取的信息关键字是query_list = [‘c%2B%2B’,’java’,’python’,’Hadoop’,’golang’,’html5′,’javascript’,’机器学习’,’图像处理’,’机器视觉’,’运维’]
使用关系型数据库mysql来存储爬取信息,设置主键防止重复信息录入数据库。
使用数据库记录已爬取url方式来实现爬虫被ban后的增量爬取。
使用jupyter notebook处理、分析爬取的数据,得出分析图表。
一、爬取数据并保存到mysql数据库
1.爬虫策略
为了实现爬虫被ban后可以由被ban处增量爬取,需要将爬取的数据分别存放在两个数据库表格中。
第一个表格保存工作信息相关数据,比如‘薪资’、‘工作名称’、‘工作地点’、‘公司名称’等。
另一个表格保存已爬取的url,每次开启爬虫都从该表中获取最后爬取的url,将其作为start_urls。
2.网页数据提取
智联招聘通过json方式提取数据
boss直聘通过xpath方式提取数据
前程无忧通过xpath方式提取数据
3.url跳转
跳转方式是当前组合关键字内容若被爬取完成,则跳转到下一组合关键字,用两个for循环嵌套city_list和query_list。
智联招聘通过下载的json是否有数据来判断当前条目是否当前组合关键字爬取完成。
boss直聘和前程无忧通过xpath判断html中下一页按钮状态是否可点击来判断是否当前组合关键字爬取完成。
4.数据保存到mysql
通过sqlalchemy和pandas来实现数据库的连接、增删改查。
二、数据清洗、统计结果、输出图表
1.数据清洗
清除数据库中关键字’salary’字段为null(面议)的所有行。
利用正则表达式提取关键字‘salary’的区间范围,并取中间值。
按照不同城市不同行业的‘salary’进行爬取,删除前后各10%。
2.统计结果
计算不同城市不同行业的平均’salary’,保存到dataframe1
计算不同城市不同行业的工作数量,保存到dataframe2
3.输出图表
利用pandas.dataframe.plot()输出图表
三、结论
1.平台之间
岗位数量排名:前程无忧 >> 智联招聘 > boss直聘。地理位置越靠南的城市越明显。
2.城市之间
岗位数量排名:北京 >上海 > 深圳 > 杭州 > 广州 > 成都 > 武汉 > 沈阳
薪资水平排名:北京 > 上海 > 深圳 > 杭州 > 广州 > 成都 > 武汉 > 沈阳
3.行业之间
岗位数量排名:java > c++ > html5 > 运维 > javascript > python > hadoop > golang > 图像处理 > 机器学习 > 机器视觉
薪资水平排名:机器学习 > golang > hadoop > 机器视觉 > c++ > java > python > 图像处理 > javascript > 运维
三、Github地址
https://github.com/lnkyzhang/crawl_job