拉勾网数据采集与可视化

python.png

全文简介

本文用python采集的是拉钩网上的'python'岗位数据,然后用python进行数据的可视化,主要涉及python爬虫和python数据分析的内容。

爬虫部分

首先用浏览器打开拉勾网首页搜索python,然后利用浏览器的开发者工具分析网络请求,发现拉勾网的数据交互是动态网页,通过对比网页上的数据发现数据提交的真实网址,再仔细观察发现拉勾网的饭爬措施。提交数据是post方式如下图


图片.png

仔细再看一下发现一个get请求,分析get里面的响应内容为公司的id,通过对比发现,和post请求之间有关联,因为post请求返回的内容里面有公司的id,而且刚好是15个。


图片.png
图片.png

爬虫部分代码实现

'''
datatime: 2018  03 15
by:北冥神君
内容:爬取拉勾网上面的数据
'''

#导入模块
import requests #网络请求模块
import re #正则模块
import time #时间模块
import random #随机数模块
# post的网址
url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false&isSchoolJob=0'

# 反爬措施
header1 = {'Host': 'www.lagou.com',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:58.0) Gecko/20100101 Firefox/58.0',
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
        'Accept-Encoding': 'gzip, deflate, br',
        'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'X-Requested-With': 'XMLHttpRequest',
        'X-Anit-Forge-Token': 'None',
        'X-Anit-Forge-Code': '0',
        'Content-Length': '26',
        'Cookie': 'Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1519816933,1519816935,1521079570,1521079575; _ga=GA1.2.129319102.1515420746; user_trace_token=20180108221226-f4036578-f47d-11e7-a021-5254005c3644; LGUID=20180108221226-f40369cf-f47d-11e7-a021-5254005c3644; index_location_city=%E5%85%A8%E5%9B%BD; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1521081597; LGSID=20180315100701-8cabf3af-27f5-11e8-b1fc-525400f775ce; LGRID=20180315103956-2609450b-27fa-11e8-b1ed-5254005c3644; _gid=GA1.2.2023749020.1521079570; JSESSIONID=ABAAABAAAIAACBI02527B187B701F2E661E90B666E236AF; hideSliderBanner20180305WithTopBannerC=1; TG-TRACK-CODE=search_code; SEARCH_ID=c9472cb5ce184e00bf8dcd8989fdc892; _gat=1; X_HTTP_TOKEN=d5fd7e2b382eab92942c6aee48b65dfa',
        'Connection': 'keep-alive',
        'Pragma': 'no-cache',
        'Cache-Control': 'no-cache'}
header2 = {'Host': 'www.lagou.com',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:58.0) Gecko/20100101 Firefox/58.0',
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
            'Accept-Encoding': 'gzip, deflate, br',
            'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
            'X-Requested-With': 'XMLHttpRequest',
            'X-Anit-Forge-Token': 'None',
            'X-Anit-Forge-Code': '0',
            'Cookie': 'Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1519816933,1519816935,1521079570,1521079575; _ga=GA1.2.129319102.1515420746; user_trace_token=20180108221226-f4036578-f47d-11e7-a021-5254005c3644; LGUID=20180108221226-f40369cf-f47d-11e7-a021-5254005c3644; index_location_city=%E5%85%A8%E5%9B%BD; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1521081597; LGSID=20180315100701-8cabf3af-27f5-11e8-b1fc-525400f775ce; LGRID=20180315103956-2609450b-27fa-11e8-b1ed-5254005c3644; _gid=GA1.2.2023749020.1521079570; JSESSIONID=ABAAABAAAIAACBI02527B187B701F2E661E90B666E236AF; hideSliderBanner20180305WithTopBannerC=1; TG-TRACK-CODE=search_code; SEARCH_ID=c9472cb5ce184e00bf8dcd8989fdc892; _gat=1; X_HTTP_TOKEN=d5fd7e2b382eab92942c6aee48b65dfa',
            'Connection': 'keep-alive',
            'Pragma': 'no-cache',
            'Cache-Control': 'no-cache'}

for n in range(1,31):
    # 要提交的数据
    form = {'first': 'false',
            'kd': 'Python',
            'pn': str(n)}

    time.sleep(random.randint(5, 10))#随机暂停5-10秒

    # 提交数据
    html = requests.post(url, data=form, headers=header1)

    # 提取数据
    data = re.findall(
        '{"companyId":.*?,"positionName":"(.*?)","workYear":"(.*?)","education":"(.*?)","jobNature":"(.*?)","financeStage":"(.*?)","companyLogo":".*?","industryField":".*?","city":"(.*?)","salary":"(.*?)","positionId":.*?,"positionAdvantage":"(.*?)","companyShortName":"(.*?)","district"',
        html.text)
    print(data)
    #提取公司ID
    companyId = re.findall(
        '{"companyId":(.*?),.*?,"district"',
        html.text)
    print(companyId)
    companyIds = ','.join(companyId)
    print(companyIds)
    urlcompanyUrl = 'https://www.lagou.com/c/approve.json?companyIds='+companyIds
    print(urlcompanyUrl)
    #反爬
    get_company = requests.get(url=urlcompanyUrl,headers = header2)
    print(get_company.text)

    # 转换成数据框

    data = pd.DataFrame(data)
    print(data)

    # 保存在本地
    data.to_csv(r'LaGouData.csv', header=False, index=False, mode='a+')

数据分析

  • 学历要求
data['学历要求'].value_counts().plot(kind='barh',rot=0)
plt.show()
5F4C4359-F6EF-48D6-9D23-146C32E9C5EF.png
  • 工作经验
data['工作经验'].value_counts().plot(kind='bar',rot=0,color='b')
plt.show()
D7666874-4689-491D-BBFE-517EBECBF1C8.png

1080ADD8-883B-4000-820D-D0410B8ADD48.png
  • 工作地点
data['工作地点'].value_counts().plot(kind='pie',autopct='%1.2f%%',explode = np.linspace(0,0.4,19))
plt.show()
1080ADD8-883B-4000-820D-D0410B8ADD48.png
  • 工资情况
data['工资'].value_counts().plot(kind='pie',autopct='%1.2f%%')
plt.show()
图片.png
  • 词云分析
final = ''
stopwords = ['PYTHON', 'python', 'Python', '工程师', '(', ')', '/']  # 停止词
for n in range(data.shape[0]):

    seg_list = list(jieba.cut(data['岗位职称'][n]))

    for seg in seg_list:
        if seg not in stopwords:
            final = final + seg + ' '
python.png

数据分析代码

import pandas as pd # 数据框操作
import numpy as np
import matplotlib.pyplot as plt # 绘图
import jieba # 分词
import matplotlib as mpl  # 配置字体

mpl.rcParams["font.sans-serif"] = ["cmb10"]
mpl.rcParams['axes.unicode_minus'] = False
# 配置绘图风格
plt.rcParams["axes.labelsize"] = 16.
plt.rcParams["xtick.labelsize"] = 14.
plt.rcParams["ytick.labelsize"] = 14.
plt.rcParams["legend.fontsize"] = 12.
plt.rcParams["figure.figsize"] = [15., 15.]

# 导入数据
data = pd.read_csv('/Users/tencenting/PycharmProjects/qm/venv/LaGouData.csv',encoding='utf-8')  # 导入数据
print(data.head())
print(data.tail())

data['学历要求'].value_counts().plot(kind='barh',rot=0)
plt.show()

data['工作经验'].value_counts().plot(kind='bar',rot=0,color='b')
plt.show()

data['工资'].value_counts().plot(kind='pie',autopct='%1.2f%%')
plt.show()

#data['工作地点'].value_counts().plot(kind='pie',autopct='%1.2f%%',shadow =False)
data['工作地点'].value_counts().plot(kind='pie',autopct='%1.2f%%',explode = np.linspace(0,0.4,19))
x = np.linspace(0,1.5,25)
print(x)
print(len(x))
plt.show()

final = ''
stopwords = ['PYTHON', 'python', 'Python', '工程师', '(', ')', '/']  # 停止词
for n in range(data.shape[0]):

    seg_list = list(jieba.cut(data['岗位职称'][n]))

    for seg in seg_list:
        if seg not in stopwords:
            final = final + seg + ' '
#final 得到的词汇
print(final)

数据分析总结

python程序员工作地点大部分集中在北京、深圳、上海、成都、广州、杭州、武汉,其中北京最多,招聘要求大部分是3-5年和1-3年的工作经验,对学历的要求为本科,工资大在8k-30k之间,从词语分析上看从事开发方向比较多。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容