目的:

  我在沈阳,东北的软件环境不太好,想换个城市,但是获取不到对不同城市的软件环境的定量分析,所以写个爬虫爬取各招聘网站上不同城市、不同行业的招聘信息,做一个定量的比较,为制定下一步计划提供一些数据支持。主要分析不同城市不同行业的岗位数量情况和薪资情况。由于各种原因的存在,很难验证所得出的结论与实际的贴合度,仅供参考。

 

概述:

  每个网站爬取的信息关键字是query_list = [‘c%2B%2B’,’java’,’python’,’Hadoop’,’golang’,’html5′,’javascript’,’机器学习’,’图像处理’,’机器视觉’,’运维’]

  每个网站爬取的城市是city_list = [‘北京’,’上海’,’广州’,’深圳’,’杭州’,’成都’,’武汉’,’沈阳’]
  city_list、query_list 、招聘网站三者的笛卡尔积即为爬取的组合关键字。

  使用关系型数据库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

版权声明:本文为grantzhang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/grantzhang/p/10394276.html