本次筆記主要記錄了本人利用python編寫爬蟲對拉勾網(wǎng)的數(shù)據(jù)分析師崗進(jìn)行爬取,因?yàn)榇蛩銖氖聰?shù)據(jù)分析師這個(gè)職業(yè),所以想對這個(gè)職業(yè)進(jìn)行一個(gè)數(shù)據(jù)分析。
首先進(jìn)行數(shù)據(jù)分析第一步是要獲取數(shù)據(jù),我選擇了從拉勾網(wǎng)進(jìn)行數(shù)據(jù)爬取。本次運(yùn)用到的知識主要是python, html, json。
先進(jìn)入拉勾網(wǎng)并用Chrome瀏覽器的開發(fā)者工具對頁面進(jìn)行觀察。
觀察發(fā)現(xiàn)其實(shí)標(biāo)簽內(nèi)部數(shù)據(jù)并不是特別完整,很多數(shù)據(jù)都被藏在了元素內(nèi)部,這樣想通過Xpath提取會變得非常麻煩和困難,因此嘗試其他方法,拉勾網(wǎng)具有反爬技術(shù),為了防止盜鏈,采用了json頁面?zhèn)鬏敂?shù)據(jù),因此我選擇去采集json數(shù)據(jù)。
發(fā)現(xiàn)有完整json數(shù)據(jù),因此開始編寫爬蟲代碼對數(shù)據(jù)進(jìn)行爬取。
首先要設(shè)置要訪問的url網(wǎng)址和請求頭文件。url網(wǎng)址是要爬取的頁面域名,請求頭文件則是訪問網(wǎng)站時(shí)訪問者的一些信息,例如用戶名,所用瀏覽器,訪問源頭等,如果不設(shè)置頭文件,則很大程度會因?yàn)樵L問頻度過高被當(dāng)作機(jī)器人而封殺ip。
先通過開發(fā)者工具獲取url地址。
隨后再通過開發(fā)者工具獲取請求頭文件Request Headers。其中主要是獲取User-Agent, Referer 和Cookie。
將以上內(nèi)容分別寫入代碼中。
在發(fā)送請求的時(shí)候有兩種發(fā)送參數(shù)方式,一種是get,另一種是post。post會以表格發(fā)送的方式發(fā)送給響應(yīng)端,無法直接在鏈接中賦值,因此需要設(shè)置一個(gè)字典來作為表格數(shù)據(jù)發(fā)送給響應(yīng)端。從開發(fā)者工具中可以看到表格內(nèi)部的結(jié)構(gòu)和信息。
因此構(gòu)建一個(gè)字典用來存儲參數(shù)數(shù)據(jù)。
這里使用request包來發(fā)送請求。
發(fā)送請求后會得到一個(gè)response,同時(shí)為了避免編碼錯(cuò)誤要先將response的編碼設(shè)置為utf-8。然后利用json包用的json.loads()方法將取得的response轉(zhuǎn)化為字典格式。根據(jù)先前對json結(jié)構(gòu)分析,要進(jìn)入到嵌套字典的最內(nèi)部才能取得一個(gè)result的list。
在取出list以后將值返給函數(shù)并進(jìn)入數(shù)據(jù)提取階段。
設(shè)置一個(gè)字典用以存儲所要保存的值。
隨后開始批量提取并存儲數(shù)據(jù)。
在主函數(shù)中對每一頁進(jìn)行上述操作的循環(huán)。
通過改變data中pn的值來進(jìn)行翻頁,同時(shí)在循環(huán)結(jié)束后,先將字典轉(zhuǎn)為DataFrame格式,再用DataFrame中的內(nèi)置方法進(jìn)行處理并導(dǎo)出為csv格式文件。最終獲取的文件可以用excel打開后效果如下。
由于編碼為utf-8因此Excel無法直接讀取,在此將文件格式轉(zhuǎn)為ansi以后,再次打開如下。
本章結(jié)束,下一章將講解如何用Excel進(jìn)行數(shù)據(jù)清洗和數(shù)據(jù)分析。