拉勾網(wǎng)數(shù)據(jù)采集與可視化

python.png

全文簡介

本文用python采集的是拉鉤網(wǎng)上的'python'崗位數(shù)據(jù),然后用python進(jìn)行數(shù)據(jù)的可視化躺坟,主要涉及python爬蟲和python數(shù)據(jù)分析的內(nèi)容。

爬蟲部分

首先用瀏覽器打開拉勾網(wǎng)首頁搜索python穷娱,然后利用瀏覽器的開發(fā)者工具分析網(wǎng)絡(luò)請求,發(fā)現(xiàn)拉勾網(wǎng)的數(shù)據(jù)交互是動態(tài)網(wǎng)頁谅辣,通過對比網(wǎng)頁上的數(shù)據(jù)發(fā)現(xiàn)數(shù)據(jù)提交的真實(shí)網(wǎng)址,再仔細(xì)觀察發(fā)現(xiàn)拉勾網(wǎng)的飯爬措施劣针。提交數(shù)據(jù)是post方式如下圖


圖片.png

仔細(xì)再看一下發(fā)現(xiàn)一個get請求拿撩,分析get里面的響應(yīng)內(nèi)容為公司的id怔软,通過對比發(fā)現(xiàn),和post請求之間有關(guān)聯(lián)择镇,因為post請求返回的內(nèi)容里面有公司的id挡逼,而且剛好是15個。


圖片.png
圖片.png

爬蟲部分代碼實(shí)現(xiàn)

'''
datatime: 2018  03 15
by:北冥神君
內(nèi)容:爬取拉勾網(wǎng)上面的數(shù)據(jù)
'''

#導(dǎo)入模塊
import requests #網(wǎng)絡(luò)請求模塊
import re #正則模塊
import time #時間模塊
import random #隨機(jī)數(shù)模塊
# post的網(wǎng)址
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):
    # 要提交的數(shù)據(jù)
    form = {'first': 'false',
            'kd': 'Python',
            'pn': str(n)}

    time.sleep(random.randint(5, 10))#隨機(jī)暫停5-10秒

    # 提交數(shù)據(jù)
    html = requests.post(url, data=form, headers=header1)

    # 提取數(shù)據(jù)
    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)

    # 轉(zhuǎn)換成數(shù)據(jù)框

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

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

數(shù)據(jù)分析

  • 學(xué)歷要求
data['學(xué)歷要求'].value_counts().plot(kind='barh',rot=0)
plt.show()
5F4C4359-F6EF-48D6-9D23-146C32E9C5EF.png
  • 工作經(jīng)驗
data['工作經(jīng)驗'].value_counts().plot(kind='bar',rot=0,color='b')
plt.show()
D7666874-4689-491D-BBFE-517EBECBF1C8.png

1080ADD8-883B-4000-820D-D0410B8ADD48.png
  • 工作地點(diǎn)
data['工作地點(diǎn)'].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

數(shù)據(jù)分析代碼

import pandas as pd # 數(shù)據(jù)框操作
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
# 配置繪圖風(fēng)格
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.]

# 導(dǎo)入數(shù)據(jù)
data = pd.read_csv('/Users/tencenting/PycharmProjects/qm/venv/LaGouData.csv',encoding='utf-8')  # 導(dǎo)入數(shù)據(jù)
print(data.head())
print(data.tail())

data['學(xué)歷要求'].value_counts().plot(kind='barh',rot=0)
plt.show()

data['工作經(jīng)驗'].value_counts().plot(kind='bar',rot=0,color='b')
plt.show()

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

#data['工作地點(diǎn)'].value_counts().plot(kind='pie',autopct='%1.2f%%',shadow =False)
data['工作地點(diǎn)'].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)

數(shù)據(jù)分析總結(jié)

python程序員工作地點(diǎn)大部分集中在北京腻豌、深圳家坎、上海、成都吝梅、廣州虱疏、杭州、武漢苏携,其中北京最多做瞪,招聘要求大部分是3-5年和1-3年的工作經(jīng)驗,對學(xué)歷的要求為本科,工資大在8k-30k之間装蓬,從詞語分析上看從事開發(fā)方向比較多著拭。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市牍帚,隨后出現(xiàn)的幾起案子儡遮,更是在濱河造成了極大的恐慌,老刑警劉巖暗赶,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鄙币,死亡現(xiàn)場離奇詭異,居然都是意外死亡蹂随,警方通過查閱死者的電腦和手機(jī)十嘿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來糙及,“玉大人详幽,你說我怎么就攤上這事〗牵” “怎么了唇聘?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柱搜。 經(jīng)常有香客問我迟郎,道長,這世上最難降的妖魔是什么聪蘸? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任宪肖,我火速辦了婚禮,結(jié)果婚禮上健爬,老公的妹妹穿的比我還像新娘控乾。我一直安慰自己,他們只是感情好娜遵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布蜕衡。 她就那樣靜靜地躺著,像睡著了一般设拟。 火紅的嫁衣襯著肌膚如雪慨仿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天纳胧,我揣著相機(jī)與錄音镰吆,去河邊找鬼。 笑死跑慕,一個胖子當(dāng)著我的面吹牛万皿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼相寇,長吁一口氣:“原來是場噩夢啊……” “哼慰于!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起唤衫,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤婆赠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佳励,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體休里,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年赃承,在試婚紗的時候發(fā)現(xiàn)自己被綠了妙黍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡瞧剖,死狀恐怖拭嫁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抓于,我是刑警寧澤做粤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站捉撮,受9級特大地震影響怕品,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巾遭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一肉康、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧灼舍,春花似錦吼和、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至砂豌,卻和暖如春厢岂,著一層夾襖步出監(jiān)牢的瞬間光督,已是汗流浹背阳距。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留结借,地道東北人筐摘。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親咖熟。 傳聞我的和親對象是個殘疾皇子圃酵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容