本次筆記主要記錄了本人利用python編寫(xiě)爬蟲(chóng)對(duì)拉勾網(wǎng)的數(shù)據(jù)分析師崗進(jìn)行爬取,因?yàn)榇蛩銖氖聰?shù)據(jù)分析師這個(gè)職業(yè),所以想對(duì)這個(gè)職業(yè)進(jìn)行一個(gè)數(shù)據(jù)分析酥艳。
首先進(jìn)行數(shù)據(jù)分析第一步是要獲取數(shù)據(jù)景殷,我選擇了從拉勾網(wǎng)進(jìn)行數(shù)據(jù)爬取。本次運(yùn)用到的知識(shí)主要是python, html, json垦藏。
先進(jìn)入拉勾網(wǎng)并用Chrome瀏覽器的開(kāi)發(fā)者工具對(duì)頁(yè)面進(jìn)行觀察。
觀察發(fā)現(xiàn)其實(shí)標(biāo)簽內(nèi)部數(shù)據(jù)并不是特別完整伞访,很多數(shù)據(jù)都被藏在了元素內(nèi)部掂骏,這樣想通過(guò)Xpath提取會(huì)變得非常麻煩和困難,因此嘗試其他方法厚掷,拉勾網(wǎng)具有反爬技術(shù)弟灼,為了防止盜鏈,采用了json頁(yè)面?zhèn)鬏敂?shù)據(jù)冒黑,因此我選擇去采集json數(shù)據(jù)田绑。
發(fā)現(xiàn)有完整json數(shù)據(jù),因此開(kāi)始編寫(xiě)爬蟲(chóng)代碼對(duì)數(shù)據(jù)進(jìn)行爬取抡爹。
首先要設(shè)置要訪(fǎng)問(wèn)的url網(wǎng)址和請(qǐng)求頭文件掩驱。url網(wǎng)址是要爬取的頁(yè)面域名,請(qǐng)求頭文件則是訪(fǎng)問(wèn)網(wǎng)站時(shí)訪(fǎng)問(wèn)者的一些信息冬竟,例如用戶(hù)名欧穴,所用瀏覽器,訪(fǎng)問(wèn)源頭等泵殴,如果不設(shè)置頭文件涮帘,則很大程度會(huì)因?yàn)樵L(fǎng)問(wèn)頻度過(guò)高被當(dāng)作機(jī)器人而封殺ip。
先通過(guò)開(kāi)發(fā)者工具獲取url地址笑诅。
隨后再通過(guò)開(kāi)發(fā)者工具獲取請(qǐng)求頭文件Request Headers调缨。其中主要是獲取User-Agent, Referer 和Cookie疮鲫。
將以上內(nèi)容分別寫(xiě)入代碼中。
在發(fā)送請(qǐng)求的時(shí)候有兩種發(fā)送參數(shù)方式弦叶,一種是get俊犯,另一種是post。post會(huì)以表格發(fā)送的方式發(fā)送給響應(yīng)端湾蔓,無(wú)法直接在鏈接中賦值瘫析,因此需要設(shè)置一個(gè)字典來(lái)作為表格數(shù)據(jù)發(fā)送給響應(yīng)端。從開(kāi)發(fā)者工具中可以看到表格內(nèi)部的結(jié)構(gòu)和信息默责。
因此構(gòu)建一個(gè)字典用來(lái)存儲(chǔ)參數(shù)數(shù)據(jù)贬循。
這里使用request包來(lái)發(fā)送請(qǐng)求。
發(fā)送請(qǐng)求后會(huì)得到一個(gè)response桃序,同時(shí)為了避免編碼錯(cuò)誤要先將response的編碼設(shè)置為utf-8杖虾。然后利用json包用的json.loads()方法將取得的response轉(zhuǎn)化為字典格式。根據(jù)先前對(duì)json結(jié)構(gòu)分析媒熊,要進(jìn)入到嵌套字典的最內(nèi)部才能取得一個(gè)result的list奇适。
在取出list以后將值返給函數(shù)并進(jìn)入數(shù)據(jù)提取階段。
設(shè)置一個(gè)字典用以存儲(chǔ)所要保存的值芦鳍。
隨后開(kāi)始批量提取并存儲(chǔ)數(shù)據(jù)嚷往。
在主函數(shù)中對(duì)每一頁(yè)進(jìn)行上述操作的循環(huán)。
通過(guò)改變data中pn的值來(lái)進(jìn)行翻頁(yè)柠衅,同時(shí)在循環(huán)結(jié)束后皮仁,先將字典轉(zhuǎn)為DataFrame格式,再用DataFrame中的內(nèi)置方法進(jìn)行處理并導(dǎo)出為csv格式文件菲宴。最終獲取的文件可以用excel打開(kāi)后效果如下贷祈。
由于編碼為utf-8因此Excel無(wú)法直接讀取,在此將文件格式轉(zhuǎn)為ansi以后喝峦,再次打開(kāi)如下势誊。
本章結(jié)束,下一章將講解如何用Excel進(jìn)行數(shù)據(jù)清洗和數(shù)據(jù)分析谣蠢。