初来上海找工作,方向python后端,也找了很多家,各种招聘网站都光顾过。想来要做一个稍微有意思的事情,就是爬取招聘网站的招聘信息,这次选择了拉勾网的python招聘信息。

浏览器:火狐(能详细的查看网站的详细信息)

1、输入关键词“python”,点击搜索

wKioL1f6TVjgkU_xAAGX2uES-n4078.png-wh_50

2、按F12,打开firebug,可以看到有post提交的数据,看响应内容,就是页面的搜索结果数据。

wKiom1f6TVnwNACuAAJVQhmjtR0575.png-wh_50

3、这是关于分页的参数

wKiom1f6TVqipt3YAAFXo5_NNCw491.png-wh_50

4、综合分析下来,请求数据的API就是

http://www.lagou.com/jobs/positionAjax.json?city=%E4%B8%8A%E6%B5%B7&needAddtionalResult=false&first=false&kd=python&pn=页码

剩下的就是用python写爬虫了。

代码如下:

# encoding: utf-8
"""
@author: chenhuachao
@license: Apache Licence 
@file: LaGouSpider.py
@time: 2016/10/1 8:17
"""
import requests
import time
import json
import configparser
from utils.util import MysqlOp


class LaGouSpiders(object):
    '''拉勾网爬虫测试'''
    def __init__(self,keyword):
        self.keyword = keyword
    def spider_run(self):
        url ="http://www.lagou.com/jobs/positionAjax.json?city=%E4%B8%8A%E6%B5%B7&needAddtionalResult=false&first=false&kd={0}&pn=".format(self.keyword)
        content = json.loads(requests.get(url+str(1)).text)
        pagesize = content.get('content').get('pageSize')
        for page in range(1,pagesize):
            content_next = json.loads(requests.get(url+str(page)).text)
            company_inro_list = content_next.get('content').get('positionResult').get('result')
            if company_inro_list:
                for company_inro in company_inro_list:
                    companyId = company_inro.get("companyId")#公司ID
                    businessZones = ','.join(company_inro.get('businessZones')) if company_inro.get('businessZones') else "无"#工作地址
                    companyFullName = company_inro.get("companyFullName","")#公司名称
                    positionName = company_inro.get("positionName")#岗位名称
                    education = company_inro.get("education","")#学历要求
                    city = company_inro.get('city',"")#城市
                    financeStage = company_inro.get("financeStage","")#公司状况(上市公司,A\B\C\D轮)
                    salary = company_inro.get("salary","")#薪资
                    workYear = company_inro.get("workYear","")#工作年限
                    companySize = company_inro.get("companySize","")#公司人数规模
                    industryField = company_inro.get("industryField","")#行业类型
                    positionAdvantage = company_inro.get("positionAdvantage","")#公司文化
                    companyLabelList = ','.join(company_inro.get("companyLabelList")) if company_inro.get("companyLabelList","") else "无"#公司福利
                    insert_mysql = MysqlOp()
                    sql = '''INSERT INTO spider.lagou_spider (companyId,job_type,businessZones,companyFullName,positionName,
                                          education,city,financeStage,salary,workYear,companySize,industryField,positionAdvantage,companyLabelList)
                                      VALUE ({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}')'''.format(companyId,
                                             keyword,businessZones,companyFullName,positionName,education,city,
                                              financeStage,salary,workYear,companySize,industryField,positionAdvantage,companyLabelList)
                    print sql
                    insert_mysql.insert(sql)
                    # print companyId,keyword,businessZones,companyFullName,positionName,education,city,financeStage,salary,workYear,companySize,industryField
            time.sleep(15)



if __name__ == '__main__':
    keyword = raw_input("请输入要爬取的岗位:")
    spider = LaGouSpiders(keyword)
    spider.spider_run()

5、运行代码,输入python

采集到的数据如下图:

wKioL1f6T0qyAlXsAAD5kYaPJHY702.png-wh_50

6、利用pandas进行简单分析,这里用的是jupyter的ipython。window命令行下输入命令“ipython notebook”

wKioL1f6UKKwntWCAABiV2m7FrI514.png-wh_50

7、新建python窗口,导入pandas和matplotlib模块,配置mysql的参数,可以直接用pandas读取mysql数据,非常方便,最后展现出招聘python开发的待遇最多的前20种待遇类别的公司总数。

wKiom1f6UijwEOqVAACwKE6VLaY221.png-wh_50

8、条形图,可以看出,待遇给出在10k-20k的公司数目是最多的。

wKiom1f6UqSSwC9LAAB3PlUPCWM394.png-wh_50

9、可供分析的内容很多,未完,待续。。。。。