1. 程式人生 > >手把手帶你抓取智聯招聘的“資料分析師”崗位!

手把手帶你抓取智聯招聘的“資料分析師”崗位!

前言


很多網友在後臺跟我留言,是否可以分享一些爬蟲相關的文章,我便提供了我以前寫過的爬蟲文章的連結(如下連結所示),大家如果感興趣的話也可以去看一看哦。在本文中,我將以智聯招聘為例,分享一下如何抓取近5000條的資料分析崗資訊

往期爬蟲連結

上海歷史天氣和空氣質量資料獲取(Python版)

網路爬蟲-京東優惠活動資料分析

快來看看招商銀行理財產品資料(程式碼及分析)

用Python爬下6萬共享單車資料,談談單車熱潮中的城市

百度指數之影象數字識別(2)

抓取百度指數引發的影象數字識別

一件有趣的事: 爬了爬自己的微信朋友

看看融資界都有哪些事情發生

【乾貨】手把手帶你抓“網上購物”類APP資訊(含程式碼)

快來圍觀2W+的豆瓣電影分類排行榜(含程式碼)

什麼?你瞭解二手車市場?(含爬蟲程式碼)

(乾貨)資料分析案例--以上海二手房為例

通過Python抓取天貓評論資料

使用Python實現豆瓣閱讀書籍資訊的獲取

使用Python爬取網頁圖片

 

爬蟲流程

首先簡單聊一下Python抓取網際網路資料的一般步驟,如下圖所示:

1)傳送請求,向對方伺服器傳送待抓取網站的連結URL;
2)返回請求,在不發生意外的情況下(意外包括網路問題、客戶端問題、伺服器問題等),對方伺服器將會返回請求的內容(即網頁原始碼)
3)

資料儲存,利用正則表示式或解析法對原始碼作清洗,並將目標資料儲存到本地(txt、csv、Excel等)或資料庫(MySQL、SQL Server、MongoDB等)

爬蟲實操

接下來,在理解了爬蟲流程之後,我們藉助於智聯招聘的網站,跟大家分析如何一步一步的完成資料的抓取。
尋找目標URL
        如下圖所示,是在智聯招聘網站上搜索“資料分析師”崗位後的響應結果。按照常理,需要按一下鍵盤中的F12鍵,對網頁內容進行監控。

                                                                  

 

接著,在原網頁中下來滾動條,並點選“下一頁”,此時右側的監控臺便發生了變化,讀者需要按下圖進行選擇:

經過這四步的選擇,就可以發現招聘網站上的資訊都在這個Preview(預覽)裡面。那麼問題來了,需要抓取的URL是什麼呢?此時只需點選Headers卡即可,你會發現請求連結就是下圖中框出來的部分:

 

傳送請求並返回請求內容
        既然找到了目標URL,下面要做的就是基於Python向智聯招聘的伺服器傳送請求了,具體程式碼如下:

import requests  # 用於傳送URL請求
import pandas as pd # 用於構造資料框
import random  # 用於產生隨機數
import time  # 用於時間停留# 

根據第一頁的URL,抓取“資料分析師”崗位的資訊
url = r'https://fe-api.zhaopin.com/c/i/sou?pageSize=60&cityId=489&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88&kt=3&lastUrlQuery=%7B%22jl%22:%22489%22,%22kw%22:%22%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88%22,%22kt%22:%223%22%7D&at=9c5682b1a4f54de89c899fb7efc7e359&rt=54eaf1be1b8845c089439d53365ea5dd&_v=0.84300214&x-zp-page-request-id=280f6d80d733447fbebafab7b8158873-1541403039080-617179'
# 構造請求的頭資訊,防止反爬蟲
headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
# 利用requests包中的get函式傳送請求
response = requests.get(url, headers = headers)
# 基於response返回Json資料
datas = response.json()

如上結果所示,即為抓取回來的招聘資訊,這些資訊是以字典的形式儲存起來的。需要說明的是,在傳送請求的程式碼中,添加了請求頭資訊,其目的就是防止對方伺服器禁止Python爬蟲。關於頭資訊可以在Headers選項中的“Request Headers”部分找到,讀者只需將“User-Agent”值摘抄下來即可。

內容解析(Json)
        下面利用字典的鍵索引知識,將所需欄位的值解析出來。這裡不妨以公司名稱為例,利用字典的索引技術將其取出來。具體如下圖所示:

OK,按照如上的策略,便可以取出其他欄位的資訊,具體程式碼如下:

# 根據Json資料返回每一條招聘資訊# 返回公司名稱
company = [i['company']['name'] for i in response.json()['data']['results']]
# 返回公司規模
size = [i['company']['size']['name'] for i in response.json()['data']['results']]
# 返回公司型別
type = [i['company']['type']['name'] for i in response.json()['data']['results']]
# 返回公司招聘資訊
positionURL = [i['positionURL'] for i in response.json()['data']['results']]
# 返回工作經驗的要求
workingExp = [i['workingExp']['name'] for i in response.json()['data']['results']]
# 返回教育水平的要求
eduLevel = [i['eduLevel']['name'] for i in response.json()['data']['results']]
# 返回薪資水平
salary = [i['salary'] for i in response.json()['data']['results']]
# 返回工作崗位名稱
jobName = [i['jobName'] for i in response.json()['data']['results']]
# 返回福利資訊
welfare = [i['welfare'] for i in response.json()['data']['results']]
# 返回崗位所在城市
city = [i['city']['items'][0]['name'] for i in response.json()['data']['results']]
# 返回經度
lat = [i['geo']['lat'] for i in response.json()['data']['results']]
# 返回緯度
lon = [i['geo']['lon'] for i in response.json()['data']['results']]
# 將返回的資訊構造表格
pd.DataFrame({'company':company,'size':size,'type':type,'positionURL':positionURL,
              'workingExp':workingExp,'eduLevel':eduLevel,'salary':salary,
              'jobName':jobName,'welfare':welfare,'city':city,'lat':lat,'lon':lon})

資料儲存
        如上操作只是將招聘網站中的第一頁內容抓取下來,如果需要抓取n多頁,就需要藉助於for迴圈的技術。但在迴圈之前,需要準確找到目標連結的規律,然後使用for迴圈就水到渠成了。所以,我們按照之前的方法,找到第二頁、第三頁、第四頁連結,然後發現其中的規律,如下圖所示:

如上圖所示,在連結中只有一部分內容發生變化,即“start=”,而其他部分都保持不變。所以,按照這個規律就可以對多頁內容進行抓取,程式碼如下:

# 構造空列表,用於儲存各頁的招聘資訊
jobs = []
# 利用for迴圈,生成規律的連結,並對這些連結進行請求的傳送和解析內容
for i in range(0,6001,60):
    url = 'https://fe-api.zhaopin.com/c/i/sou?start='+str(i)+'&pageSize=60&cityId=489&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88&kt=3&lastUrlQuery=%7B%22p%22:5,%22jl%22:%22489%22,%22kw%22:%22%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88%22,%22kt%22:%223%22%7D&at=17a95e7000264c3898168b11c8f17193&rt=57a342d946134b66a264e18fc60a17c6&_v=0.02365098&x-zp-page-request-id=a3f1b317599f46338d56e5d080a05223-1541300804515-144155'
    response = requests.get(url, headers = headers)
    print('Down Loading:','https://fe-api.zhaopin.com/c/i/sou?start='+str(i)+'&pageSize=60','......')

    company = [i['company']['name'] for i in response.json()['data']['results']]
    size = [i['company']['size']['name'] for i in response.json()['data']['results']]
    type = [i['company']['type']['name'] for i in response.json()['data']['results']]
    positionURL = [i['positionURL'] for i in response.json()['data']['results']]
    workingExp = [i['workingExp']['name'] for i in response.json()['data']['results']]
    eduLevel = [i['eduLevel']['name'] for i in response.json()['data']['results']]
    salary = [i['salary'] for i in response.json()['data']['results']]
    jobName = [i['jobName'] for i in response.json()['data']['results']]
    welfare = [i['welfare'] for i in response.json()['data']['results']]
    city = [i['city']['items'][0]['name'] for i in response.json()['data']['results']]
    lat = [i['geo']['lat'] for i in response.json()['data']['results']]
    lon = [i['geo']['lon'] for i in response.json()['data']['results']]    
    
    # 隨機生成5~8之間的實數,用於頁面的停留時長(仍然是防止反爬蟲)
    seconds = random.randint(5,8)
    time.sleep(seconds)    
    # 將每一頁的內容儲存到jobs列表中
    jobs.append(pd.DataFrame({'company':company,'size':size,'type':type,'positionURL':positionURL,
                              'workingExp':workingExp,'eduLevel':eduLevel,'salary':salary,
                              'jobName':jobName,'welfare':welfare,'city':city,'lat':lat,'lon':lon}))

# 拼接所有頁碼下的招聘資訊
jobs2 = pd.concat(jobs)
# 將資料匯出到Excel檔案中
jobs2.to_excel('jobs.xlsx', index = False)

如上結果所示,即為資料匯出後的Excel效果圖。在下一期,我將針對抓取回來的資料,進行內容的分析。

 

結語

OK,關於使用Python完成招聘網站資料的抓取就分享到這裡,如果你有任何問題,歡迎在公眾號的留言區域表達你的疑問。同時,也歡迎各位朋友繼續轉發與分享文中的內容,讓更多的人學習和進步。
關於Python的其他知識(包括資料的清洗、整理、運算、分析、視覺化和建模),讀者可以查閱我的新書《從零開始學Python資料分析與挖掘》,如果您對書中的內容有任何疑問,都可以聯絡我。

本文中的程式碼和資料可以從百度雲盤中下載,只需關注資料分析1480”公眾號,並回覆智聯招聘”即可。