Python爬虫某招聘网站的岗位信息
前言
文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。
作者:阿爾法游戲
PS:如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取http://t.cn/A6Zvjdun
故事又要從一個盆友說起
昨晚有個盆友 問我 爬蟲學的怎么樣了?
正當我不明所以之際,盆友的微信語音通話接了進來
友:“看你在學python,爬蟲寫的怎么樣了呀,我想抓一下某招聘網站的數據,能幫我整一個嗎,不行的話我也去看看”
我:“哦哦,你不是技術嘛,自己來嘛
友:“我不是沒怎么接觸過嘛”
我:“行,剛好我也學習下,周末有時間我幫你看下”
簡單介紹下這個朋友吧,游戲圈某技術大拿,真大拿的那種!!
故事聊完了,咱們開工吧
1、前期準備
因為是爬蟲,所以咱們需要用到如下幾個庫
-
requests
-
fake_useragent
-
json
-
pandas
Requests?的介紹是這樣的:?唯一的一個非轉基因的 Python HTTP 庫,人類可以安全享用
反正就是你用來獲取網頁數據需要用到的,本次咱們只需要用到get方法:
res=request.get(url)構造一個向服務器請求資源的url對象, 這個對象是Request庫內部生成的, 這時候的res返回的是一個包含服務器資源的Response對象,包含從服務器返回的所有的相關資源。
fake_useragent?直譯就是 假身份,作用和直譯基本一樣,是個表里不一的“人”
UserAgent是識別瀏覽器的一串字符串,相當于瀏覽器的身份證,在利用爬蟲爬取網站數據時,頻繁更換UserAgent可以避免觸發相應的反爬機制。fake-useragent對頻繁更換UserAgent提供了很好的支持,可謂防反扒利器。
json?就是上期我們本來打算介紹但是換了一個庫實現的 用于處理json數據,可以將已編碼的 JSON 字符串解碼為 Python 對象
pandas?是我們的老朋友了,因為常和excel打交道,對表格的鐘愛,所以pandas在這里主要作用只是將抓取的數據轉化為dataframe型后導出成excel表
導入需要用到的庫
import requests from fake_useragent import UserAgent import json import pandas as pd import time2、任務分析
其實這步應該在?第1步 前期準備?之前,但是文檔寫到了這里,咱也不想回去了。
這一步很關鍵,主要是思路分析,大致可以分為以下幾點:
-
?明確你需要的數據是什么
-
?找到你需要的數據來源
-
?理清原始數據的結構
-
?輸出你需要的數據形式
1)明確你需要的數據
比如盆友需要崗位信息,包含哪些字段,常規的有崗位名稱、薪酬范圍、需要的工作年限等等。當你明確需要的數據指標之后,你再去數據來源看是否有這些指標已經如何獲取。
| 運營 | 30-50k | 5-8年 |
| 技術 | 30-50k | 5-8年 |
2)找到你需要的數據來源
盆友需要的是脈脈上的崗位信息,那么我們需要熟悉脈脈的崗位信息在哪可見,以及它們是如何展示的。
這是移動端
移動端沒法直接獲取url信息,我們可以去pc端看看
這是pc端
這里pc端用的是Google Chrome瀏覽器?為了讓你能夠點開xhr等等,你需要安裝一個瀏覽器工具
下載瀏覽器驅動程序:http://chromedriver.storage.googleapis.com/index.html
查看驅動和瀏覽器版本的映射關系:http://blog.csdn.net/huilan_same/article/details/51896672
pc端是一個列表,我們通過下拉可以加載更多,這說明這個頁面是非靜態頁面,因此在獲取url的時候需要特別注意。
操作流程:
-
第1步,獲取數據源URL地址:?F12 打開瀏覽器開發者工具調試頁面,選中network——xhr,刷新網頁后選擇 招聘,可以看見右側有刷新調試頁面有內容刷新,選中最近一個刷新的條目即可獲取數據源url地址,見右側的request URL內容即是。
-
第2步,找到該URL地址規律:?url = 'https://maimai.cn/sdk/company/obtian_company_job?webcid=jYZTTwkX&count=20&page=0&job_title='(你點了應該會提示沒數據),仔細分析,我們可以得到動態變化部分應該為count和page,count表示每頁20個,page表示當前頁數。通過修改count和page后再瀏覽器打開我們驗證了該判斷。
-
第3步,獲取數據源URL地址:?因為網頁動態,這里建議把cookie記錄下來備用,cookie數據在request Header中。
3)理清原始數據的結構
當我們獲取到數據來源url之后,就需要理清這些原始數據長啥樣,如此才好去解析整理出想要的信息。打開一個url,我們發現是一個json,嗯,很完整的多層json。
網頁json圖
使用json.loads方法做簡單的預處理,然后我們一層一層尋找目標數據指標所在。
【這里我是通過spyder變量管理器 點開數據 讓大家直觀理解】
-
第一層:字典
-
第二層:字典
-
第三層:列表
-
第四層:字典
4)輸出你需要的數據
通過理清原始數據結構,結合你需要的數據,咱們就可以進行數據簡單過濾選擇了
直接創建一個空字典,存儲你需要的數據信息
3、實現細節
1)材料準備
將url按照規律進行拆分
#url里count和page是變化的規律所在,自選一個進行循環 #因脈脈沒有通用的崗位list匯總頁面,因此如果想獲取其他list可以通過搜索或者查詢指定公司職位后修改url即可 #url = https://maimai.cn/sdk/company/obtian_company_job?webcid=jYZTTwkX&count=20&page=50&job_title=path = 'https://maimai.cn/sdk/company/obtian_company_job?webcid=jYZTTwkX&count=20&page=' tail = '&job_title='#這里需要注意,一定要加cookie,否則將獲取不到數據 headers = {"User-Agent": UserAgent(verify_ssl=False).random,"Cookie":'填入你自己的瀏覽器cookie值'}2)數據請求
請求數據并用json.load()簡單進行數據類型轉化python對象
#創建空list,用于存儲抓取的崗位信息(字典存儲) list = [] #計數用的變量n n = 0 #因單頁顯示20條崗位信息,所以需要翻頁(實際網頁效果是下拉加載更多) #數據為json,因此需要json.load 解析 for i in range(0,51): #我這里只去前50頁數據url = path + str(i) +tailresponse_comment = requests.get(url,headers = headers)json_comment = response_comment.textjson_comment = json.loads(json_comment)3)數據篩選
接上個for循環,因為每頁內有20條數據,因此需要再用一個循環取出每條數據并存入一個空字典中,同時將每個字典合到空列表中進行匯總
data = json_comment['data']#單頁顯示20條崗位信息,逐一采集for i in range(len(data['normal_data'])):n = n+1#創建空字典用于存儲單個崗位信息result = {}result['工作年限'] = data['normal_data'][i]['worktime']result['學歷要求'] = data['normal_data'][i]['degree']result['職位描述'] = data['normal_data'][i]['description']result['公司名稱'] = data['normal_data'][i]['company']result['工作地點'] = data['normal_data'][i]['city']result['職位名稱'] = data['normal_data'][i]['position']result['崗位薪酬'] = data['normal_data'][i]['salary_info']result['最近修改時間'] = data['normal_data'][i]['modify_time']result['發布時間'] = data['normal_data'][i]['pub_time']result['瀏覽量'] = data['normal_data'][i]['views']result['發布人職位'] = data['normal_data'][i]['user']['position'].upper()#將崗位信息存入list中 list.append(result)4)數據導出
直接使用pandas的to_excel方法導出數據成excel
#將存有崗位信息的列表轉化為dataframe表格形式 df = pd.DataFrame(list) df.to_excel(r'F:\Python\崗位數據.xlsx',sheet_name='崗位信息',index = 05)結果展示
?
4、完整代碼
import requests from fake_useragent import UserAgent import json import pandas as pd import timestart_time = time.perf_counter()#url里count和page是變化的規律所在,自選一個進行循環 #因脈脈沒有通用的崗位list匯總頁面,因此如果想獲取其他list可以通過搜索或者查詢指定公司職位后修改url即可 #url = https://maimai.cn/sdk/company/obtian_company_job?webcid=jYZTTwkX&count=20&page=50&job_title=path = 'https://maimai.cn/sdk/company/obtian_company_job?webcid=jYZTTwkX&count=20&page=' tail = '&job_title='#這里需要注意,一定要加cookie,否則將獲取不到數據 headers = {"User-Agent": UserAgent(verify_ssl=False).random,"Cookie":'你的cookie'}#創建空list,用于存儲抓取的崗位信息(字典存儲) list = [] #計數用的變量n n = 0 #因單頁顯示20條崗位信息,所以需要翻頁(實際網頁效果是下拉加載更多) #數據為json,因此需要json.load 解析 for i in range(1,2):url = path + str(i) +tailresponse_comment = requests.get(url,headers = headers)json_comment = response_comment.textjson_comment = json.loads(json_comment)data = json_comment['data'] # print('\r正在抓取第%d頁崗位信息(每頁20個崗位)'%i,end=' ')#單頁顯示20條崗位信息,逐一采集for i in range(len(data['normal_data'])):n = n+1#創建空字典用于存儲單個崗位信息result = {}result['工作年限'] = data['normal_data'][i]['worktime']result['學歷要求'] = data['normal_data'][i]['degree']result['職位描述'] = data['normal_data'][i]['description']result['公司名稱'] = data['normal_data'][i]['company']result['工作地點'] = data['normal_data'][i]['city']result['職位名稱'] = data['normal_data'][i]['position']result['崗位薪酬'] = data['normal_data'][i]['salary_info']result['最近修改時間'] = data['normal_data'][i]['modify_time']result['發布時間'] = data['normal_data'][i]['pub_time']result['瀏覽量'] = data['normal_data'][i]['views']result['發布人職位'] = data['normal_data'][i]['user']['position'].upper()#將崗位信息存入list中 list.append(result)print('\r已整合%d個崗位信息'%n,end=' ')use_time = time.perf_counter() print('\n合計運行時長:{0:.2f} 秒'.format(use_time-start_time)) #將存有崗位信息的列表轉化為dataframe表格形式 df = pd.DataFrame(list) df.to_excel(r'F:\Python\脈脈-字節跳動招聘崗位.xlsx',sheet_name='崗位信息',index = 0)總結
以上是生活随笔為你收集整理的Python爬虫某招聘网站的岗位信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python进程已结束,退出代码 -10
- 下一篇: 安全运营四要素之资产、脆弱性、威胁和事件