產品運營中的數據分析思考筆記(2):獲取數據之利用python爬蟲獲取數據
作為產品運營人員,在工作中處理數據,分析數據和運用數據,基本是常態。雖非數據分析崗位,但是也是一個要重度應用數據的崗位,如果自身沒有獲取數據的能力,其實是非常尷尬的。
我們在上篇文章:產品運營中的數據分析思考筆記(1):數據指標的設定與統計採集,說了下,設定指標,採集數據的問題。假定我們已經經過一段時間的積累,有了歷史數據的沉澱。那我們接下來要做的就是,提取相關數據,所以本篇文章就說一說數據分析流程「「設定指標→數據獲取→數據處理→數據分析→得出結論→結果呈現」」中第二個步驟:數據獲取的問題。
一般對數據的獲取,來自兩個方面:內部數據和外部數據。
內部數據,無非就是在自己公司的資料庫或數據統計平台中根據分析的需要取數。如果是要從數據統計平台中提取數據,一般的數據統計平台,都會支持數據導出,只需要導出需要的數據即可。如果是要從公司資料庫中提取數據,則要求我們會用sql語言取數。
運用sql從公司資料庫取數,主要就是學習資料庫的「查」的基本操作,包括提取特定情況下的數據,數據的分組聚合和多表的聯繫,相對來說較為簡單。可以參看下專欄中這篇文章:產品運營中的數據分析思考筆記(3):數據獲取之利用python操作mysql資料庫取數
當然,對於產品或運營人員,我們有時也未見得有讀取數據的許可權,但是有句話說的好,有備無患。你掌握了一項技能,不能用到要好過你要用的時候,卻不會。
外部數據的獲取,主要有兩種方式:
第一種就是獲取外部公開的數據集,比如一些科研機構、企業、政府會開放一些數據,你需要到特定的網站去下載這些數據。這些數據集通常比較完善、質量相對較高(如中國統計信息網)。
第二種就是利用爬蟲從網路中爬取,比如從招聘網站獲取某個職位的招聘信息,租房網站獲取某一地區的租房信息,電商網站獲取某個商品的品論信息等等,基於這些爬取的數據,我們可以做數據分析。
我們要聊的是第二種外部獲取數據的方式:利用python爬蟲獲取外部數據。
所以默認本文讀者具備了python語法基本知識以及爬蟲基本知識(如果沒有這方面的知識,也不妨礙對文章的理解,同時筆者會在文章末尾附上曾在學習時遇見的很好的python基礎學習以及爬蟲基本知識學習的博客)。
我們就以最貼近生活的例子——求職者找工作為例子,聊聊如何利用爬蟲來在招聘網站中快速獲取想要的數據,然後據此分析,輔助決策。
我們先不著急擼管,哦,錯了,是擼代碼,先來捋一捋思路:
1,作為求職者,找一份工作,至少要了解下以下這些信息:崗位的市場行情,如薪資範圍:工作1~3年,薪資如何?應屆生,薪資如何?招聘公司的規模如何?公司的辦公地址,距離居住地的路程是近是遠?學歷要求是怎樣的?總體的市場行情如何。。。。。。
2,這些數據獲取的方式,一般說來,要麼是直接從第三方平台獲得,要麼就是利用爬蟲技術爬取數據。顯然 這些招聘信息已經放在招聘網上了,那就不用想了,最好的批量獲取數據的方式就是,寫個爬蟲腳本,把關於求職工作崗位的一些數據爬取下來,然後保存在excel電子表格中,留待下一步分析。
ok,思路捋順後,我們開干,這裡,以拉鉤網上的「產品運營」崗位做示例。
使用環境:win10+python3+Juypter Notebook
第一步:分析網頁
要爬取一個網頁,肯定首先分析一下網頁結構。
現在很多網站都用了一種叫做Ajax(非同步載入)的技術,就是說,網頁打開了,先給你看上面一部分東西,然後剩下的東西再慢慢載入。 所以你可以看到很多網頁,都是慢慢的刷出來的,或者有些網站隨著你的移動,很多信息才慢慢載入出來。這樣的網頁有個好處,就是網頁載入速度特別快(因為不用一次載入全部內容)。
但這個技術是不利於爬蟲的爬取的,所以這個時候,我們就要費點功夫了。
很幸運的是,拉鉤採用了這種技術。非同步載入的信息,我們需要藉助chrome瀏覽器的小工具進行分析,按F12即可打開,點擊Nerwork進入網路分析界面,界面如下:
這時候是一片空白,我們按F5刷新一下刷新一下,就可以看到一系列的網路請求了。
然後我們就開始找可疑的網頁資源。首先,圖片,css什麼之類的可以跳過,一般來說,關注點放在xhr(什麼是xhr,想更多了解,可以參見這篇博客:深入理解ajax系列第一篇——XHR對象)這種類型請求上,如下:
這類數據一般都會用json格式,我們也可以嘗試在過濾器中輸入json,來篩選尋找。
上圖發現了兩個xhr請求,從字面意思看很有可能是我們需要的信息,右鍵點擊,在另一個界面打開:
what is this?Are you kidding me?嗯,這裡是個坑,同樣在寫爬蟲代碼時候,如果在http請求中,不加入請求頭信息,伺服器返回信息也是這樣的,但是筆者不明白的是,為什麼,在這裡筆者直接用瀏覽器新開窗口,也是這個拒絕訪問的界面。如果有大神知道,希望給解解惑,拜謝!
回到正題,雖然新開窗口,無法訪問,但條條大陸通羅馬,我們可以在右邊的框中,切換到「Preview」,然後點content——positionResult查看,能看到是關於職位的信息,以鍵值對的格式呈現,這就是json格式,特別適合網頁數據交換。
第一步網頁分析,至此結束,下一步,我們來構造請求網址。
第二步,網址構造
在「Headers」中,看到網頁地址,通過觀察網頁地址可以發現推測出: http://www.lagou.com/jobs/positionAjax.json?這一段是固定的,剩下的我們發現有個city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false&isSchoolJob=0
再查看請求發送參數列表,到這裡我們可以肯定city參數便是城市,pn參數便是頁數,kd參數便是職位關鍵字。
當然這只是一個網頁的內容,對於更多頁面的內容,怎麼獲取呢?再來看看關於「產品運營」職位,一共有30頁,每頁有15個數據,所以我們只需要構造循環,遍歷每一頁的數據。
第三步,編寫爬蟲腳本寫代碼
需要說明的是因為這個網頁的格式是用的json,那麼我們可以用json格式很好的讀出內容。 這裡我們切換成到preview下,然後點content——positionResult——result,可以發現出先一個列表,再點開就可以看到每個職位的內容。為什麼要從這裡看?有個好處就是知道這個json文件的層級結構,方便等下編碼。
具體代碼展示:
也可去筆者的github上直接下載:https://github.com/banyanmo/lagou
import requests,jsonfrom openpyxl import Workbook#http請求頭信息headers={Accept:application/json, text/javascript, */*; q=0.01,Accept-Encoding:gzip, deflate, br,Accept-Language:zh-CN,zh;q=0.8,Connection:keep-alive,Content-Length:25,Content-Type:application/x-www-form-urlencoded; charset=UTF-8,Cookie:user_trace_token=20170214020222-9151732d-f216-11e6-acb5-525400f775ce; LGUID=20170214020222-91517b06-f216-11e6-acb5-525400f775ce; JSESSIONID=ABAAABAAAGFABEF53B117A40684BFB6190FCDFF136B2AE8; _putrc=ECA3D429446342E9; login=true; unick=yz; showExpriedIndex=1; showExpriedCompanyHome=1; showExpriedMyPublish=1; hasDeliver=0; PRE_UTM=; PRE_HOST=; PRE_SITE=; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2F; TG-TRACK-CODE=index_navigation; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1494688520,1494690499,1496044502,1496048593; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1496061497; _gid=GA1.2.2090691601.1496061497; _gat=1; _ga=GA1.2.1759377285.1487008943; LGSID=20170529203716-8c254049-446b-11e7-947e-5254005c3644; LGRID=20170529203828-b6fc4c8e-446b-11e7-ba7f-525400f775ce; SEARCH_ID=13c3482b5ddc4bb7bfda721bbe6d71c7; index_location_city=%E6%9D%AD%E5%B7%9E,Host:www.lagou.com,Origin:https://www.lagou.com,Referer:https://www.lagou.com/jobs/list_Python?,User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36,X-Anit-Forge-Code:0,X-Anit-Forge-Token:None,X-Requested-With:XMLHttpRequest} def get_json(url, page, lang_name): data = {first: "true", pn: page, kd: lang_name,city:"北京"}#POST請求 json = requests.post(url,data,headers=headers).json() list_con = json[content][positionResult][result] info_list = [] for i in list_con: info = [] info.append(i[companyId]) info.append(i[companyFullName]) info.append(i[companyShortName]) info.append(i[companySize]) info.append(str(i[companyLabelList])) info.append(i[industryField]) info.append(i[financeStage]) info.append(i[positionId]) info.append(i[positionName]) info.append(i[positionAdvantage])# info.append(i[positionLables]) info.append(i[city]) info.append(i[district])# info.append(i[businessZones]) info.append(i[salary]) info.append(i[education]) info.append(i[workYear]) info_list.append(info) return info_list def main(): lang_name = input(職位名:) page = 1 url = http://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false info_result=[] title = [公司ID,公司全名,公司簡稱,公司規模,公司標籤,行業領域,融資情況,"職位編號", "職位名稱","職位優勢","城市","區域","薪資水平",教育程度, "工作經驗"] info_result.append(title) #遍歷網址 while page < 31: info = get_json(url, page, lang_name) info_result = info_result + info page += 1#寫入excel文件 wb = Workbook() ws1 = wb.active ws1.title = lang_name for row in info_result: ws1.append(row) wb.save(職位信息3.xlsx) main()
打開excel文件,查看數據是否存取成功:
我們看到,關於「產品運營」崗位的數據,被成功的保存在excel表格中。下一步就是,據此爬取的數據,做數據處理。關於數據分析中的第三個步驟:數據處理的問題,我們下回再聊。
爬蟲是獲取外部數據的一個很方便的工具,關於爬蟲的知識,遠不止於此,這裡只是一個簡單的示例。作為產品運營人員,雖然需要與數據打交道,但是寫爬蟲也未必是必須要掌握的技能。然而點亮這個技能樹,我個人覺得肯定不會是壞事情。而且作為產品運營,難免會經常和技術同事打交道,如果我們在溝通時,能讓雙方站在對等的語言交流環境里,也會方便信息的溝通和理解。而讓雙方站在對等的語言交流環境里,最好的方法,就是熟悉對方的語言環境,這也是自己接觸學習python主要原因之一。
技術距離普通人很遠嗎?或許以前是,但是現在這個時代,如果稍微以超前一點的視角來看待,也許不用幾年,具備一點編程能力就不再是一個人的可選項技能,而是成為不得不掌握的基礎辦公技能,就跟現在,作為職場人你必須得掌握office辦公軟體一樣。這個世界是動態的,用靜態的眼光看世界看自己,只會越來越傻。和時代共振,我們才會找到又焦慮又舒服的頻率。
關於python以及爬蟲學習的博客
爬蟲教程:http://cuiqingcai.com/1052.html
python學習教程:http://www.cnblogs.com/vamei/tag/Python/default.html?page=1
歡迎分享轉載,註明原文出處即可
推薦閱讀:
※大數據時代的小人物
※大數據分析報告價值百萬or分文不值?
※如何用sklearn機器學習,來預測泰坦尼克號生存概率?
※別人都配了這些鏡頭,你不來一個嗎?——圖蟲EXIF分析之一
※2018年5大可視化BI工具選型對比分析