1. 程式人生 > >Python拉勾網資料採集與視覺化

Python拉勾網資料採集與視覺化

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

Python中文社群

Python中文開發者的

精神部落

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&retryload=1

640?wx_fmt=jpeg

全文簡介

本文是先採集拉勾網上面的資料,採集的是Python崗位的資料,然後用Python進行視覺化。主要涉及的是爬蟲&資料視覺化的知識。

爬蟲部分

先用Python來抓取拉勾網上面的資料,採用的是簡單好用的requests模組。主要注意的地方是,拉勾網屬於動態網頁,所以會用到瀏覽器的F12開發者工具進行抓包。抓包以後會發現,其實網頁是一個POST的形式,所以要提交資料,提交的資料如下圖:

640?wx_fmt=jpeg

真實網址是:

https://www.lagou.com/jobs/positionAjax.jsonneedAddtionalResult=false&isSchoolJob=0

在上圖也可以輕鬆發現:kd是查詢關鍵詞,pn是頁數,可以實現翻頁。

程式碼實現

  1. import requests # 網路請求

  2. import re

  3. import time

  4. import random

  5. # post的網址

  6. url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false&isSchoolJob=0'

  7. # 反爬措施

  8. header = {'Host': 'www.lagou.com',

  9. 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'

    ,

  10. 'Accept': 'application/json, text/javascript, */*; q=0.01',

  11. 'Accept-Language': 'zh-CN,en-US;q=0.7,en;q=0.3',

  12. 'Accept-Encoding': 'gzip, deflate, br',

  13. 'Referer': 'https://www.lagou.com/jobs/list_Python?labelWords=&fromSearch=true&suginput=',

  14. 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',

  15. 'X-Requested-With': 'XMLHttpRequest',

  16. 'X-Anit-Forge-Token': 'None',

  17. 'X-Anit-Forge-Code': '0',

  18. 'Content-Length': '26',

  19. 'Cookie': 'user_trace_token=20171103191801-9206e24f-9ca2-40ab-95a3-23947c0b972a; _ga=GA1.2.545192972.1509707889; LGUID=20171103191805-a9838dac-c088-11e7-9704-5254005c3644; JSESSIONID=ABAAABAACDBABJB2EE720304E451B2CEFA1723CE83F19CC; _gat=1; LGSID=20171228225143-9edb51dd-ebde-11e7-b670-525400f775ce; PRE_UTM=; PRE_HOST=www.baidu.com; PRE_SITE=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DKkJPgBHAnny1nUKaLpx2oDfUXv9ItIF3kBAWM2-fDNu%26ck%3D3065.1.126.376.140.374.139.129%26shh%3Dwww.baidu.com%26sht%3Dmonline_3_dg%26wd%3D%26eqid%3Db0ec59d100013c7f000000055a4504f6; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2F; LGRID=20171228225224-b6cc7abd-ebde-11e7-9f67-5254005c3644; index_location_city=%E5%85%A8%E5%9B%BD; TG-TRACK-CODE=index_search; SEARCH_ID=3ec21cea985a4a5fa2ab279d868560c8',

  20. 'Connection': 'keep-alive',

  21. 'Pragma': 'no-cache',

  22. 'Cache-Control': 'no-cache'}

  23. for n in range(30):

  24. # 要提交的資料

  25.    form = {'first':'false',

  26. 'kd':'Python',

  27. 'pn':str(n)}

  28.    time.sleep(random.randint(2,5))

  29. # 提交資料

  30.    html = requests.post(url,data=form,headers = header)

  31. # 提取資料

  32.    data = re.findall('{"companyId":.*?,"positionName":"(.*?)","workYear":"(.*?)","education":"(.*?)","jobNature":"(.*?)","financeStage":"(.*?)","companyLogo":".*?","industryField":".*?","city":"(.*?)","salary":"(.*?)","positionId":.*?,"positionAdvantage":"(.*?)","companyShortName":"(.*?)","district"',html.text)

  33. # 轉換成資料框

  34.    data = pd.DataFrame(data)

  35. # 儲存在本地

  36.    data.to_csv(r'D:\Windows 7 Documents\Desktop\My\LaGouDataMatlab.csv',header = False, index = False, mode = 'a+')

注意:抓取資料的時候不要爬取太快,除非你有其他的反爬措施,比如更換IP等,另外不需登入,我在程式碼加入了time模組,用於限制爬取速度。

資料視覺化

下載下來的資料長成這個樣子:

640?wx_fmt=jpeg

注意標題(也就是列明)是我自己新增的。

匯入模組並配置繪圖風格

  1. import pandas as pd # 資料框操作

  2. import numpy as np

  3. import matplotlib.pyplot as plt # 繪圖

  4. import jieba # 分詞

  5. from wordcloud importWordCloud# 詞雲視覺化

  6. import matplotlib as mpl  # 配置字型

  7. from pyecharts importGeo# 地理圖

  8. mpl.rcParams["font.sans-serif"] = ["Microsoft YaHei"]

  9. # 配置繪圖風格

  10. plt.rcParams["axes.labelsize"] = 16.

  11. plt.rcParams["xtick.labelsize"] = 14.

  12. plt.rcParams["ytick.labelsize"] = 14.

  13. plt.rcParams["legend.fontsize"] = 12.

  14. plt.rcParams["figure.figsize"] = [15., 15.]

注意:匯入模組的時候其他都容易解決,除了wordcloud這個模組,這個模組我建議大家手動安裝,如果pip安裝的話,會提示你缺少C++14.0之類的錯誤,導致安裝不上。手動下載whl檔案就可以順利安裝了。

資料預覽

  1. # 匯入資料

  2. data = pd.read_csv('D:\\Windows 7 Documents\\Desktop\\My\\LaGouDataPython.csv',encoding='gbk')  # 匯入資料

  3. data.head()

640?wx_fmt=jpeg

read_csv路徑不要帶有中文

  1. data.tail()

640?wx_fmt=jpeg

學歷要求

  1. data['學歷要求'].value_counts().plot(kind='barh',rot=0)

  2. plt.show()

640?wx_fmt=jpeg

工作經驗

  1. data['工作經驗'].value_counts().plot(kind='bar',rot=0,color='b')

  2. plt.show()

640?wx_fmt=jpeg

Python熱門崗位

  1. final = ''

  2. stopwords = ['PYTHON','python','Python','工程師','(',')','/'] # 停止詞

  3. for n in range(data.shape[0]):

  4.    seg_list = list(jieba.cut(data['崗位職稱'][n]))

  5. for seg in seg_list:  

  6. if seg notin stopwords:  

  7. final = final + seg + ' '

  8. # final 得到的詞彙

640?wx_fmt=jpeg

工作地點

  1. data['工作地點'].value_counts().plot(kind='pie',autopct='%1.2f%%',explode = np.linspace(0,1.5,25))

  2. plt.show()

640?wx_fmt=jpeg

工作地理圖

  1. # 提取資料框

  2. data2 = list(map(lambda x:(data['工作地點'][x],eval(re.split('k|K',data['工資'][x])[0])*1000),range(len(data))))

  3. # 提取價格資訊

  4. data3 = pd.DataFrame(data2)

  5. # 轉化成Geo需要的格式

  6. data4 = list(map(lambda x:(data3.groupby(0).mean()[1].index[x],data3.groupby(0).mean()[1].values[x]),range(len(data3.groupby(0)))))

  7. # 地理位置展示

  8. geo = Geo("全國Python工資佈局", "製作人:挖掘機小王子", title_color="#fff", title_pos="left", width=1200, height=600,

  9. background_color='#404a59')

  10. attr, value = geo.cast(data4)

  11. geo.add("", attr, value, type="heatmap", is_visualmap=True, visual_range=[0, 300], visual_text_color='#fff')

  12. # 中國地圖Python工資,此分佈是最低薪資

  13. geo

640?wx_fmt=jpeg

本文作者

挖掘機小王子,資料分析愛好者。

部落格:zhihu.com/people/WaJueJiPrince

相關推薦

Python資料採集視覺

Python中文社群Python中文開發者的精神部落全文簡介本文是先採集拉勾網上面的資料,採集的

資料分析視覺

前端時間爬取了拉鉤網的某一職位的相關資訊,於是就有了分析一下這些資料的想法,爬取的方式可以看我的另一篇部落格,csv檔案的資料主要是以下的這些在csv中儲存的格式為第一列為職位名稱,第二,三列為薪水的範圍,第四列為工作城市,第五、六列為工作經驗年限,第七列為最低學歷,第八列為

python爬取資料並進行資料視覺

爬取拉勾網關於python職位相關的資料資訊,並將爬取的資料已csv各式存入檔案,然後對csv檔案相關欄位的資料進行清洗,並對資料視覺化展示,包括柱狀圖展示、直方圖展示、詞雲展示等並根據視覺化的資料做進一步的分析,其餘分析和展示讀者可自行發揮和擴充套件包括各種分析和不同的儲存方式等。。。。。 一、爬取和分析

Python爬蟲:爬取資料分析崗位資料

1 JSON介紹 JSON(JavaScript Object Notation)已經成為通過HTTP請求在Web瀏覽器和其他應用程式之間傳送資料的標準格式之一。比CSV格式更加靈活。Json資料格式,非常接近於有效的Pyhton程式碼,其特點是:JSON物件所

python爬取資料儲存到mysql資料庫

環境:python3 相關包:requests , json , pymysql 思路:1.通過chrome F12找到拉鉤請求介面,分析request的各項引數 2.模擬瀏覽器請求拉鉤介面 3.預設返回的json不是標準格式 ,

Python爬取資料(破解反爬蟲機制)

人生苦短, 我學 Python! 這篇文章主要記錄一下我學習 Python 爬蟲的一個小例子, 是爬取的拉勾網的資料. 1.準備 配置 Python 環境什麼的就不說了, 網上教程很多, 自行解決. 2.扒原始碼 先開啟拉勾網的網頁. 我們要爬取這部分的資料

7.1 python實戰並儲存到mongodb

拉鉤網實戰 爬取拉勾網有關“爬蟲”的職位資訊,並把爬取的資料儲存在MongoDB資料庫中 確定網頁的載入方式是JavaScript載入通過谷歌瀏覽器開發者工具分析和尋找網頁的真實請求,確定真實資料在position.Ajax開頭的連結裡,請求方式是POST使用request

python3 利用requests爬取資料

學習python,瞭解了一點爬蟲的知識,成功的對拉勾網的招聘資訊進行了爬取,將爬取心得記錄下來,和大家一起學習進步。 準備工作: python3 requests pandas 谷歌瀏覽器(或者火狐瀏覽器、qq瀏覽器)

angularjs仿webapp總結記錄

這是慕課網上的實戰課程,使用的技術棧有bower+less+angular1.x+gulp。沒有涉及到後端,資料是模擬的json資料。 gulp less 關於less部分,只使用了一些最基礎的語法。如下: 檔案引用 使用@import

Python+pandas+matplotlib資料分析視覺案例(附原始碼)

問題描述:執行下面的程式,在當前資料夾中生成飯店營業額模擬資料檔案data.csv然後完成下面的

Python高階資料處理視覺

聚類分析Cluster (1)聚類分析主要使用kmeans演算法,kmeans演算法的主要有兩個步驟:①隨機定義K個數據點為聚類中心,並根據觀測資料到K個數據點的距離將所有的觀測資料分配給這K個聚類中心;②調整K個聚類中心的位置到分配給它們的觀測資料的均值位置

python抓取網頁資料處理後視覺

抓取文章的連結,訪問量儲存到本地 1 #coding=utf-8 2 import requests as req 3 import re 4 import urllib 5 from bs4 import BeautifulSoup 6 import sys 7 import code

3-6 用 Pandas 進行資料預處理:資料清洗視覺(版本:py3)

主要內容: 格式轉換 缺失資料 異常資料 資料標準化操作 格式轉換 如Python記錄時間的方式,不能夠直接實現減運算,就需要進行轉換 pandas.to_datetime 缺失資料 忽略缺失資料 直接標記 利用平均值、最常出現值進行填充 異常資料 處

智聯Python相關職位的資料分析及視覺-Pandas&Matplotlib篇 python

Numpy(Numerical Python的簡稱)是Python科學計算的基礎包。它提供了以下功能: 快速高效的多維陣列物件ndarray。 用於對陣列執行元素級計算以及直接對陣列執行數學運算的函式。 用於讀寫硬碟上基於陣列的資料集的工具。 線性代數運算、傅立

Scikit-Learn TensorFlow 機器學習實用指南學習筆記 4 —— 資料探索視覺、發現規律

紅色石頭的個人網站:redstonewill.com 目前為止,我們已經對資料有了初步的認識,大體上明白了我們要處理的資料型別。現在,我們將進入更深入的研究。 首先,確保已經劃分了測試集並放置一邊,我們只會對訓練集進行操作。另外,如果訓練集很大,可以從中取樣一些作

探索性資料分析視覺

  世界如此大,我想去看看;資料如此豐富,怎麼能看完。   面對未知,人類是富有探索精神的,可以不畏艱險,可以排除萬難,正是這種探索精神使得人類不斷進步不斷創造一個又一個奇蹟。對於紛繁複雜的資料世界,我們如何進行探索性分析呢? 探索性資料分析   之前

讀取CSV檔案進行簡單的資料處理視覺分析

機緣巧合之下,看到了這麼一個題,之前也沒接觸過視覺化這一塊,感覺挺有意思就順手做了做 大致意思呢,就是在csv裡有三種資料:一個時間,一個振幅(emmm,有點彆扭),一個頻率。但是在頻率上有問題,有外在頻率干擾,要過濾掉干擾,找出傳遞真正資訊的頻率。並對其傳遞的資訊做出

python資料分析新手入門課程學習——(二)探索分析視覺(來源:慕課

 一,單因子與對比分析視覺化 資料 import pandas as pd df = pd.read_csv('./HR.csv') #檢視前十條資料 df.head(10) 以下為顯示的結果 我們可以看出: 第一個屬性satisf

詳解如何pyhton批量採集java招聘資訊資料

大資料(Big Data)是指那些超過傳統資料庫系統處理能力的資料。它的資料規模和轉輸速度要求很高,或者其結構不適合原本的資料庫系統。為了獲取大資料中的價值,我們必須選擇另一種方式來處理它。 資料中隱藏著有價值的模式和資訊,在以往需要相當的時間和成本才能提取這些資訊。如沃爾瑪或谷歌這類領先企業都要付高昂的代

python爬取 網際網路大資料職業情況

爬取拉勾網資訊 資料處理 製圖 所需知識只有一點點(畢竟是個小白): requests基礎部分 json pyecharts wordcloud 接下來開始敲程式碼了,程式碼分成了3個部分:爬取、製圖、生成詞雲 爬取部分: 首先要說明的是,拉勾網有反爬