基于網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的數(shù)據(jù)分析師崗位數(shù)據(jù)分析_第1頁(yè)
基于網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的數(shù)據(jù)分析師崗位數(shù)據(jù)分析_第2頁(yè)
基于網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的數(shù)據(jù)分析師崗位數(shù)據(jù)分析_第3頁(yè)
基于網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的數(shù)據(jù)分析師崗位數(shù)據(jù)分析_第4頁(yè)
基于網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的數(shù)據(jù)分析師崗位數(shù)據(jù)分析_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

摘要 本課題采用Python網(wǎng)絡(luò)爬蟲(chóng)技術(shù),基于JSON、Matploylib、Pandas、selenium、Pyechars等類庫(kù),對(duì)拉勾網(wǎng)、泰迪內(nèi)推網(wǎng)站的招聘信息進(jìn)行數(shù)據(jù)采集和預(yù)處理,并從招聘區(qū)域、學(xué)歷分布、工作經(jīng)驗(yàn)要求、薪資水平、公司類型、工作年限、福利詞云等維度對(duì)數(shù)據(jù)分析師崗位的招聘信息進(jìn)行可視化分析,進(jìn)而為求職者進(jìn)一步明確崗位需求提供參考依據(jù)。根據(jù)數(shù)據(jù)源選擇、數(shù)據(jù)采集與存儲(chǔ)、數(shù)據(jù)清洗和數(shù)據(jù)可視化分析的步驟,本課題將獲取到的2500余條招聘信息進(jìn)行數(shù)據(jù)預(yù)處理,并通過(guò)區(qū)域地圖、餅圖、折線圖、箱線圖等不同圖表形式,直觀的展示了各項(xiàng)數(shù)據(jù)的分析結(jié)果。關(guān)鍵詞:數(shù)據(jù)挖掘;Python;網(wǎng)絡(luò)爬蟲(chóng);數(shù)據(jù)可視化目錄13507摘要 -2-16069目錄 -3-6174第1章緒論 176591.1課題背景 1120751.2課題目的和意義 1191731.3相關(guān)技術(shù)基礎(chǔ)理論 289521.3.1網(wǎng)絡(luò)爬蟲(chóng) 230531.3.2動(dòng)態(tài)網(wǎng)頁(yè) 3257731.3.3JSON 3107501.3.4Matploylib 430831.3.5Pandas 4117361.3.6selenium庫(kù) 558301.3.7Pyechars 515983第2章數(shù)據(jù)采集 6306692.1爬蟲(chóng)算法設(shè)計(jì) 6295892.2對(duì)目標(biāo)網(wǎng)站的選取和分析 776202.3泰迪內(nèi)推網(wǎng)站直接爬蟲(chóng)算法實(shí)現(xiàn) 7181992.3.1獲取招聘URL 746522.3.2招聘信息數(shù)據(jù)爬取 8244922.3.3數(shù)據(jù)存儲(chǔ) 979672.4泰迪內(nèi)推網(wǎng)站匿名爬蟲(chóng)算法實(shí)現(xiàn) 1031682.4.1獲取招聘URL 1060162.4.2招聘信息數(shù)據(jù)爬取 10154632.4.3數(shù)據(jù)存儲(chǔ) 11322682.5拉勾網(wǎng)爬蟲(chóng)算法實(shí)現(xiàn) 11241882.5.1獲取招聘URL 11270702.5.2招聘信息數(shù)據(jù)爬取 12113172.5.3數(shù)據(jù)存儲(chǔ) 1314928第3章數(shù)據(jù)預(yù)處理 14186713.1數(shù)據(jù)清洗 1415183.2數(shù)據(jù)規(guī)范化 1464763.2.1拆分和整合數(shù)據(jù) 14126263.2.2數(shù)據(jù)加工 158014第4章數(shù)據(jù)可視化分析 17281274.1各地區(qū)招聘人數(shù) 17185784.2學(xué)歷情況分析 17300694.3工作經(jīng)驗(yàn)占比 18182464.4地區(qū)最低工資和最高工資對(duì)比 19230654.5主要城市薪資水平 2050544.6公司類型占比 21121964.7各工作年限薪資均值中位數(shù) 21255674.8公司福利詞云 2218451第5章總結(jié) 2437705.1總結(jié) 24161755.2展望 2517922參考文獻(xiàn) 2614502致謝 287244作品(軟件)使用說(shuō)明書 29PAGE9緒論課題背景21世紀(jì)是數(shù)據(jù)科學(xué)的時(shí)代,我們的日常生活中也會(huì)產(chǎn)生無(wú)數(shù)的數(shù)據(jù),小到網(wǎng)絡(luò)購(gòu)物的日常明細(xì)數(shù)據(jù),大到全國(guó)各項(xiàng)業(yè)務(wù)增長(zhǎng)的指數(shù),如何利用好數(shù)據(jù),如何從數(shù)據(jù)中找到隱含的規(guī)律,這對(duì)我們今后的生活和工作具有重要的指導(dǎo)意義,從而誕生了數(shù)據(jù)分析師這個(gè)崗位[1]。數(shù)據(jù)分析師崗位在各人才招聘網(wǎng)站上的需求呈現(xiàn)爆炸式增長(zhǎng)趨勢(shì),已成為計(jì)算機(jī)類專業(yè)學(xué)生就業(yè)的重要崗位[2]。各高校也相繼開(kāi)設(shè)了大數(shù)據(jù)技術(shù)、數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)等相關(guān)專業(yè),越來(lái)越多的計(jì)算機(jī)人才開(kāi)始涌入社會(huì)。但數(shù)據(jù)分析崗位需求眾多,對(duì)學(xué)歷學(xué)位要求、薪資待遇等各不相同,致使很多社會(huì)中的求職者面臨著就業(yè)的困擾。為進(jìn)一步了解數(shù)據(jù)分析師崗位的人才需求狀況和職業(yè)能力要求、薪資待遇水平等信息,有效提取并利用招聘數(shù)據(jù)也已成為了數(shù)據(jù)分析與挖掘領(lǐng)域的研究熱點(diǎn)。為了解決此困擾,本課題通過(guò)網(wǎng)絡(luò)爬蟲(chóng)技術(shù)和python語(yǔ)言對(duì)拉勾網(wǎng)、泰迪內(nèi)推網(wǎng)站上抓取幾大熱門城市的數(shù)據(jù)分析崗位數(shù)據(jù)進(jìn)行挖掘分析和可視化展示,進(jìn)而得出幫助求職者面臨就業(yè)的困擾。課題目的和意義為幫助大數(shù)據(jù)相關(guān)專業(yè)畢業(yè)生了解數(shù)據(jù)分析師崗位的市場(chǎng)需求和薪資待遇等信息,從而更好的匹配求職者找到心儀的就業(yè)崗位,本課題利用Python網(wǎng)絡(luò)爬蟲(chóng)技術(shù)對(duì)相關(guān)招聘信息網(wǎng)站的招聘信息進(jìn)行采集處理,并從招聘區(qū)域、學(xué)歷分布、工作經(jīng)驗(yàn)要求、薪資水平、公司類型、工作年限、福利詞云等維度對(duì)數(shù)據(jù)分析師崗位的招聘信息進(jìn)行可視化分析,進(jìn)而為求職者進(jìn)一步明確崗位需求提供參考依據(jù)。根據(jù)數(shù)據(jù)源選擇、數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)預(yù)處理、數(shù)據(jù)可視化分析的步驟,通過(guò)綜合運(yùn)用互聯(lián)網(wǎng)數(shù)據(jù)爬蟲(chóng)技術(shù)和圖表可視化庫(kù),本課題將獲取到的2500余條招聘信息進(jìn)行數(shù)據(jù)預(yù)處理和多維度綜合分析,并通過(guò)區(qū)域地圖、餅圖、折線圖、箱線圖等不同圖表形式,直觀的展示了各項(xiàng)數(shù)據(jù)的分析結(jié)果,從而幫助計(jì)算機(jī)專業(yè)學(xué)生更好的了解數(shù)據(jù)分析師崗位的薪資情況、崗位能力要求、工作經(jīng)驗(yàn)與學(xué)歷學(xué)位要求等,對(duì)相關(guān)專業(yè)學(xué)生做好職業(yè)發(fā)展規(guī)劃,明確學(xué)習(xí)目標(biāo)也具有一定的參考價(jià)值。相關(guān)技術(shù)基礎(chǔ)理論本次課題主要是先通過(guò)對(duì)拉勾網(wǎng)、泰迪內(nèi)推網(wǎng)設(shè)計(jì)專屬的爬蟲(chóng)腳本,在從獲取的數(shù)據(jù)通過(guò)Pandas庫(kù)進(jìn)行數(shù)據(jù)清洗,利用Matploylib和Pyechars庫(kù)進(jìn)行數(shù)據(jù)可視化。相關(guān)技術(shù)基礎(chǔ)理論如下所示。網(wǎng)絡(luò)爬蟲(chóng)網(wǎng)絡(luò)爬蟲(chóng)(WebCrawler),是一種按照一定的規(guī)則,基于http協(xié)議中請(qǐng)求與響應(yīng)機(jī)制,來(lái)自動(dòng)提取Web網(wǎng)頁(yè)的應(yīng)用程序或者腳本,其優(yōu)點(diǎn)是可以將整個(gè)網(wǎng)頁(yè)的源代碼完整爬取下來(lái)。網(wǎng)絡(luò)爬蟲(chóng)流程如圖11所示。圖11網(wǎng)絡(luò)爬蟲(chóng)流程圖訪問(wèn)者發(fā)送請(qǐng)求并傳輸url到目標(biāo)服務(wù)器,目標(biāo)服務(wù)器通過(guò)相關(guān)處理和優(yōu)化分析后返回訪問(wèn)者所需信息,訪問(wèn)者得到相關(guān)HTML信息后可利用BeautifulSoup庫(kù),正則表達(dá)式和Xpath路徑語(yǔ)言等技術(shù)去獲取到想要的網(wǎng)頁(yè)固定信息[3-4]。動(dòng)態(tài)網(wǎng)頁(yè)動(dòng)態(tài)網(wǎng)頁(yè)是相對(duì)于靜態(tài)網(wǎng)頁(yè)而言的,是指跟靜態(tài)網(wǎng)頁(yè)相對(duì)的一種網(wǎng)頁(yè)編程技術(shù),網(wǎng)頁(yè)內(nèi)容可以隨著時(shí)間、環(huán)境等情況不同而動(dòng)態(tài)改變[5]。動(dòng)態(tài)網(wǎng)頁(yè)是基本的html語(yǔ)法規(guī)范與Java、VB、VC等高級(jí)程序設(shè)計(jì)語(yǔ)言、數(shù)據(jù)庫(kù)編程等多種技術(shù)的融合,這些程序代碼可以讓用戶和網(wǎng)頁(yè)之間進(jìn)行交互來(lái)實(shí)現(xiàn)網(wǎng)站的一些特定功能。動(dòng)態(tài)網(wǎng)頁(yè)首先根據(jù)用戶的指令到數(shù)據(jù)庫(kù)中找和指令相對(duì)應(yīng)的數(shù)據(jù),然后傳遞給服務(wù)器,服務(wù)器把動(dòng)態(tài)頁(yè)面編譯成標(biāo)準(zhǔn)的HTML代碼后傳遞給用戶瀏覽器,這樣用戶就看到了網(wǎng)頁(yè)。網(wǎng)站是否采用動(dòng)態(tài)頁(yè)面完全取決于當(dāng)前網(wǎng)頁(yè)需實(shí)現(xiàn)的功能,通常都是根據(jù)具體需求采用動(dòng)靜結(jié)合的方式。動(dòng)態(tài)網(wǎng)站的實(shí)現(xiàn)通?;跀?shù)據(jù)庫(kù)技術(shù),融合了程序設(shè)計(jì)語(yǔ)言,在實(shí)現(xiàn)網(wǎng)站強(qiáng)大功能的同時(shí)可有效降低網(wǎng)站的維護(hù)成本。動(dòng)態(tài)網(wǎng)站工作原理如圖12所示。圖12動(dòng)態(tài)網(wǎng)站工作原理JSONJSON(JavaScriptObjectNotation,JS對(duì)象簡(jiǎn)譜)是一種取代XML的輕量級(jí)的文本數(shù)據(jù)交換格式[6]。JSON基于歐洲計(jì)算機(jī)協(xié)會(huì)制定的js規(guī)范,使用Javascript語(yǔ)法來(lái)描述數(shù)據(jù)對(duì)象,JSON解析器和JSON庫(kù)支持許多不同的編程語(yǔ)言,獨(dú)立于語(yǔ)言和平臺(tái),目前常見(jiàn)的動(dòng)態(tài)(PHP,JSP,.NET)編程語(yǔ)言都支持JSON。簡(jiǎn)單來(lái)說(shuō):json就是一種在各個(gè)編程語(yǔ)言中流通的數(shù)據(jù)格式,負(fù)責(zé)不同編程語(yǔ)言中的數(shù)據(jù)傳遞和交互。MatploylibMatplotlib是一個(gè)Python的2D繪圖庫(kù),可方便生成繪圖、直方圖、功率譜、條形圖、錯(cuò)誤圖、散點(diǎn)圖等,是Python中最常用的可視化工具之一[7]。有了Matplotlib的支持,在數(shù)據(jù)可視化階段,就可以用簡(jiǎn)單的代碼完成相對(duì)復(fù)雜的工作。Matploylib繪制過(guò)程流程如圖13所示。圖13Matploylib繪制過(guò)程流程圖PandasPandas是python的一個(gè)數(shù)據(jù)分析包,是基于NumPy的一種工具,是為解決數(shù)據(jù)分析任務(wù)而由AQRCapitalManagement于2008年4月開(kāi)發(fā)創(chuàng)建的。Pandas提供了高效地操作大型數(shù)據(jù)集所需的工具,具有快速便捷地處理數(shù)據(jù)的函數(shù)和方法,是高效的數(shù)據(jù)分析環(huán)境[8]。Pandas庫(kù)提供了基于數(shù)理統(tǒng)計(jì)的各種數(shù)據(jù)處理方法和工具,納入了大量庫(kù)和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,可以實(shí)現(xiàn)Excel無(wú)法實(shí)現(xiàn)的處理邏輯,特別是可與Requests、Scrapy、Matplotlib、Echarts等庫(kù)結(jié)合,成為Python的核心數(shù)據(jù)分析支持庫(kù),廣泛應(yīng)用于金融、數(shù)理研究、物理計(jì)算、統(tǒng)計(jì)、工程等各領(lǐng)域。Pandas庫(kù)的很多底層算法都經(jīng)Cython優(yōu)化,因此對(duì)于大量數(shù)據(jù)(特別是結(jié)構(gòu)化數(shù)據(jù))的分析與處理,Pandas庫(kù)非常適合。selenium庫(kù)Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具,包括IDE、Grid、RC、WebDriver等[9],Selenium測(cè)試直接運(yùn)行在瀏覽器中,模擬使用者的實(shí)際操作,具有很強(qiáng)的真實(shí)感,支持IE、Opera、Google等主流瀏覽器。Selenium利用自動(dòng)化測(cè)試技術(shù),通過(guò)設(shè)計(jì)好的腳本執(zhí)行重復(fù)性程序操作,就像真實(shí)用戶所做的一樣,從終端用戶的角度測(cè)試應(yīng)用程序。本課題中,selenium運(yùn)行在Google瀏覽器上,結(jié)合web前端的標(biāo)簽,通過(guò)搜尋class、id等網(wǎng)頁(yè)標(biāo)簽里的屬性和應(yīng)用xpath來(lái)定位網(wǎng)頁(yè)中的元素。selenium既可定位元素,也可對(duì)定位到的元素進(jìn)行點(diǎn)擊、插入文本等操作,可使用Python、Java等多種語(yǔ)言實(shí)現(xiàn)。當(dāng)定位到文本框時(shí)可自動(dòng)輸入指定內(nèi)容,當(dāng)定位到關(guān)閉符號(hào)時(shí)可進(jìn)行關(guān)閉窗口操作等。PyecharsEcharts是百度開(kāi)源的一個(gè)數(shù)據(jù)可視化JS庫(kù),主要用于數(shù)據(jù)可視化[10]。pyecharts是一款將python與echarts結(jié)合的強(qiáng)大的數(shù)據(jù)可視化工具,是一個(gè)用于生成Echarts圖表的類庫(kù),實(shí)際上就是Echarts與Python的對(duì)接。pyechars不僅能實(shí)現(xiàn)地圖數(shù)據(jù)的可視化,還可實(shí)現(xiàn)柱狀圖、雷達(dá)圖等很多常用數(shù)據(jù)的可視化,提供直觀,生動(dòng),可交互,可高度個(gè)性化定制的數(shù)據(jù)可視化圖表。最終的結(jié)果可以保存為html文件,可以流暢的運(yùn)行在PC和移動(dòng)設(shè)備上,也可通過(guò)主流的Notebook、JupyterNotebook和JupyterLab等環(huán)境的顯示。數(shù)據(jù)采集數(shù)據(jù)采集是科學(xué)進(jìn)行數(shù)據(jù)分析的基礎(chǔ),數(shù)據(jù)采集準(zhǔn)確性決定了數(shù)據(jù)分析的價(jià)值。數(shù)據(jù)采集包括歷史數(shù)據(jù)的采集和當(dāng)前市場(chǎng)數(shù)據(jù)的采集,常見(jiàn)的數(shù)據(jù)源分為四類:開(kāi)放數(shù)據(jù)源,爬蟲(chóng)抓取,日志采集和傳感器[11]。本課題采用爬蟲(chóng)抓取的方式實(shí)現(xiàn)數(shù)據(jù)采集。目前大多數(shù)的爬蟲(chóng)抓取使用Python后臺(tái)腳本類語(yǔ)言編寫,網(wǎng)絡(luò)爬蟲(chóng)是一種按照一定的規(guī)則,自動(dòng)地抓取萬(wàn)維網(wǎng)信息的程序或者腳本。本課題的數(shù)據(jù)集是通過(guò)爬取拉勾網(wǎng)、泰迪內(nèi)推兩個(gè)網(wǎng)站的招聘數(shù)據(jù)取得的。爬蟲(chóng)算法設(shè)計(jì)本文對(duì)泰迪內(nèi)推網(wǎng)站的爬蟲(chóng)算法設(shè)計(jì)一共有兩種。第一種是通過(guò)調(diào)用Request模塊對(duì)相應(yīng)URL發(fā)起請(qǐng)求,請(qǐng)求成功返回后,利用json模塊加載出網(wǎng)頁(yè)的HTML5語(yǔ)言,從中得到需要的信息,在利用字典提取出需要的相關(guān)信息,最后將獲取的信息保存在指定的CSV文件中,為下一步數(shù)據(jù)分析提供數(shù)據(jù)支撐[12]。第二種是通過(guò)selenium庫(kù)對(duì)計(jì)算機(jī)偽裝真實(shí)使用者后瀏覽網(wǎng)頁(yè),進(jìn)行爬取。第二種爬蟲(chóng)算法也是通過(guò)調(diào)用Request模塊對(duì)相應(yīng)URL發(fā)起請(qǐng)求,解析出響應(yīng)頁(yè)面的每條招聘信息的URL地址,再通過(guò)Request模塊發(fā)出請(qǐng)求,爬取詳細(xì)的網(wǎng)頁(yè)信息,并通過(guò)Xpath確定所需文本的具體位置,并對(duì)文本內(nèi)容進(jìn)行解析和抓取,最終將數(shù)據(jù)保存在指定的CSV文件中以備后續(xù)處理[13]。本文對(duì)拉勾網(wǎng)的爬蟲(chóng)算法設(shè)計(jì)是調(diào)用Request模塊對(duì)相應(yīng)URL發(fā)起請(qǐng)求,請(qǐng)求成功返回后。利用正則表達(dá)式找出script標(biāo)簽下ID為"__NEXT_DATA__"的,類型為json的所有HTLM5語(yǔ)言。在調(diào)用json.load()函數(shù)解析json文件。在利用字典提取出需要的相關(guān)信息,最后將獲得的信息保存在指定的CSV文件中,為下一步數(shù)據(jù)分析提供數(shù)據(jù)支撐。對(duì)目標(biāo)網(wǎng)站的選取和分析在眾多的招聘網(wǎng)站中,本文選取了“泰迪內(nèi)推網(wǎng)”和“拉勾網(wǎng)”進(jìn)行數(shù)據(jù)爬取,網(wǎng)站的URL分別為/、/。對(duì)“泰迪內(nèi)推”爬取的是目標(biāo)網(wǎng)站的所有工作崗位。在返回信息中,泰迪內(nèi)推的招聘信息所示。圖21泰迪內(nèi)推的招聘信息對(duì)“拉勾網(wǎng)”爬取的是目標(biāo)網(wǎng)站的大數(shù)據(jù)工作崗位、python工作崗位和Java工作崗位,在返回信息中,拉勾網(wǎng)的招聘信息分別如圖22、圖23、圖24所示。圖22拉勾網(wǎng)的大數(shù)據(jù)工作崗位招聘信息圖23拉勾網(wǎng)的python崗位招聘信息圖24拉勾網(wǎng)的Java工作崗位招聘信息泰迪內(nèi)推網(wǎng)站直接爬蟲(chóng)算法實(shí)現(xiàn)獲取招聘URL首先對(duì)“泰迪內(nèi)推”招聘網(wǎng)站采用直接爬蟲(chóng)的方式爬取招聘信息。通過(guò)Google瀏覽器的網(wǎng)頁(yè)檢查功能確定該網(wǎng)站使用GET請(qǐng)求方式,在Python中請(qǐng)求網(wǎng)頁(yè)常用標(biāo)準(zhǔn)庫(kù)urllib的request包和第三方庫(kù)requests,但由于urllib標(biāo)準(zhǔn)庫(kù)的request包相對(duì)requests來(lái)說(shuō)使用不夠簡(jiǎn)潔和便利,所以本課題采用第三方庫(kù)requests的get方法請(qǐng)求網(wǎng)頁(yè)。開(kāi)發(fā)者可按F12鍵進(jìn)入開(kāi)發(fā)者模式以進(jìn)行頁(yè)面分析,在Network頁(yè)簽點(diǎn)擊查看全部,刷新頁(yè)面后可在Headers中查看參數(shù)信息的請(qǐng)求方式為GET,狀態(tài)碼為200,同時(shí)在Response中可查看響應(yīng)信息。關(guān)鍵代碼如下:importrequestsurl='/api/enterprise/job/public/es?pageSize=1+0&pageNumber=1'rq=requests.get(url)print(rq)上述代碼是利用request模塊對(duì)泰迪內(nèi)推網(wǎng)進(jìn)行訪問(wèn),并輸出get到的請(qǐng)求是否為200。招聘信息數(shù)據(jù)爬取在泰迪內(nèi)推網(wǎng)的招聘崗位信息的頁(yè)面,本文的第一種爬蟲(chóng)算法是借助于動(dòng)態(tài)網(wǎng)頁(yè)生成的json文件,找到了存放整個(gè)網(wǎng)頁(yè)的json文件的URL。這樣大大簡(jiǎn)易了爬蟲(chóng)的難度。存放json文件URL具體如下圖25所示。圖25json文件URL不難看出網(wǎng)站的數(shù)據(jù)存儲(chǔ)在data字典下的content字典,利用json文件字典的特性,從json文件中取出想要的信息。具體代碼如下:foriincontent:updateTime=i['updateTime']willNature=i['willNature']positionName=i['positionName']minimumWage=i['minimumWage']maximumWage=i['maximumWage']exp=i['exp']detailedAddress=i['enterpriseAddress']['detailedAddress']shortName=i['enterpriseExtInfo']['shortName']industry=i['enterpriseExtInfo']['industry']econKind=i['enterpriseExtInfo']['econKind']personScope=i['enterpriseExtInfo']['personScope']provinceCode=i['enterpriseAddress']['provinceCode']id=i['id']上述代碼是把信息全部存放在content字典下利用字典的特性取出想要的信息。數(shù)據(jù)存儲(chǔ)Python內(nèi)置了CSV文件操作函數(shù),所以本文選擇將數(shù)據(jù)寫入CSV文件實(shí)現(xiàn)保存工作。具體代碼如下:withopen('job_detail11.csv','a',encoding='UTF8',newline='')asf:header=['發(fā)布時(shí)間','招聘人數(shù)','工作崗位','最低工資','最高工資','工作經(jīng)歷','公司地址','公司名稱','工作領(lǐng)域','公司類型','公司人數(shù)','省份','id']writer=csv.DictWriter(f,fieldnames=header)writer.writeheader()writer.writerows(datas)上述代碼是設(shè)置好csv文件的格式,并把表頭設(shè)置好,對(duì)爬取的數(shù)據(jù)進(jìn)行保存。泰迪內(nèi)推網(wǎng)站匿名爬蟲(chóng)算法實(shí)現(xiàn)獲取招聘URL對(duì)“泰迪內(nèi)推”招聘爬蟲(chóng)算法第二種的爬取,利用了Google瀏覽器作為引擎,利用selenium庫(kù)里的webdriver模塊實(shí)現(xiàn)自動(dòng)化爬取。具體代碼如下:url='/#/jobList'browser=webdriver.Chrome()browser.get(url)上述代碼是利用了webdriver模塊對(duì)瀏覽器進(jìn)行人工點(diǎn)擊。啟動(dòng)Google瀏覽器,模擬人工進(jìn)行搜索,如圖26所示。圖26webdriver控制Google瀏覽器招聘信息數(shù)據(jù)爬取在泰迪內(nèi)推網(wǎng)的招聘崗位信息的頁(yè)面,根據(jù)數(shù)據(jù)采集所需的文本,獲取文本信息的Xpath,通過(guò)Xpath解析抓取所需數(shù)據(jù)。具體代碼如下:ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="jobInfo"]/h5[@class="tit"]/span[{x}]'.format(y=s,x=ba_1)element=browser.find_element(by=By.XPATH,value=ele)basic_info['job'].append(element.text)basic_info['salary'].append(element.text)basic_info['Education'].append(element.text)basic_info['Experience'].append(element.text)basic_info['Recruits'].append(element.text)basic_info['Scale'].append(element.text)basic_info['Category'].append(element.text)basic_info['Company'].append(element.text)basic_info['DataTime'].append(element.text)上述代碼里利用了Xpath來(lái)找到想要信息。數(shù)據(jù)存儲(chǔ)Python中利用os模塊,對(duì)收集來(lái)的數(shù)據(jù)進(jìn)行存儲(chǔ),具體代碼如下:importosbasic_info={'job':[],'salary':[],'Education':[],'Experience':[],'Recruits':[],'Category':[],'Scale':[],'Company':[],'DataTime':[]}yaoxie=os.path.dirname(os.path.abspath(__file__))data_frame=pd.DataFrame(basic_info)data_frame.to_csv('Info.csv',encoding='gb18030')上述代碼是對(duì)爬取的信息進(jìn)行了保存,將爬取的數(shù)據(jù)都保存到info.csv這個(gè)文件中。拉勾網(wǎng)爬蟲(chóng)算法實(shí)現(xiàn)獲取招聘URL打開(kāi)拉勾網(wǎng)進(jìn)入招聘頁(yè)面,參照上述步驟進(jìn)入開(kāi)發(fā)者模式,在Headers中查看參數(shù)信息的請(qǐng)求方式為GET方式,狀態(tài)碼為200。同時(shí)在Response中查看響應(yīng)信息,提取出Response的txt文件,在調(diào)用json.load()加載出HTLM5語(yǔ)言,在使用正則表達(dá)式找出script標(biāo)簽下ID為"__NEXT_DATA__"的,類型為json的所有HTLM5語(yǔ)言。具體代碼如下:url=f'/wn/jobs?pn={page}&fromSearch=true&kd=Python'response=requests.get(url=url,headers=headers)html_data=response.textjson_str=re.findall('<scriptid="__NEXT_DATA__"type="application/json">(.*?)</script>',html_data)[0]time.sleep(3)json_data=json.loads(json_str)上述代碼是利用了request模塊先進(jìn)行對(duì)拉勾網(wǎng)的訪問(wèn),之后利用json加載html5語(yǔ)言。招聘信息數(shù)據(jù)爬取在拉勾網(wǎng)的招聘崗位信息的頁(yè)面,根據(jù)數(shù)據(jù)采集所需的文本,利用json文件字典的特性從字段中取出相應(yīng)的字段,具體代碼如下:result=json_data['props']['pageProps']['initData']['content']['positionResult']['result']forresinresult:positionName=res['positionName']companyFullName=res['companyFullName']companySize=res['companySize']industryField=res['industryField']financeStage=res['financeStage']companyLabelList=res['companyLabelList']firstType=res['firstType']city=res['city']district=res['district']salary=res['salary']salaryMonth=res['salaryMonth']workYear=res['workYear']jobNature=res['jobNature']education=res['education']上述代碼是利用了json字典的特性,從字典中取出想要的字段信息。數(shù)據(jù)存儲(chǔ)Python內(nèi)置了CSV文件操作函數(shù),所以本文選擇將數(shù)據(jù)寫入CSV文件實(shí)現(xiàn)保存工作。具體代碼如下:f=open('拉勾.csv',mode='a',encoding='utf-8',newline='')csv_writer=csv.writer(f)csv_writer.writerow(['positionName','companyFullName','companySize','industryField','financeStage','companyLabelList','firstType','city','district','salary','salaryMonth','workYear','jobNature','education'])csv_writer.writerow([positionName,companyFullName,companySize,industryField,financeStage,companyLabelList,firstType,city,district,salary,salaryMonth,workYear,jobNature,education])上述代碼是將數(shù)據(jù)存儲(chǔ)到設(shè)置好的csv中,將csv的表頭設(shè)置,將數(shù)據(jù)進(jìn)行一一對(duì)應(yīng),利用遍歷進(jìn)行存儲(chǔ)。數(shù)據(jù)預(yù)處理數(shù)據(jù)清洗數(shù)據(jù)清洗是對(duì)數(shù)據(jù)進(jìn)行審查和校驗(yàn)的過(guò)程,即去除信息中的重復(fù)信息和錯(cuò)誤記錄,提高數(shù)據(jù)質(zhì)量,減少錯(cuò)誤,確保數(shù)據(jù)的準(zhǔn)確性和有效性。數(shù)據(jù)清洗的過(guò)程對(duì)數(shù)據(jù)分析十分有必要,主要包括刪除錯(cuò)誤數(shù)據(jù)、處理重復(fù)數(shù)據(jù)和處理空值等三個(gè)步驟。在保證數(shù)據(jù)一一對(duì)應(yīng)的前提下,去除重復(fù)行。具體代碼如下:lagou=lagou.drop_duplicates(inplace=True)使用isnull()和sum()函數(shù)查看每列缺失值的數(shù)量,如果將帶有空值的數(shù)據(jù)剔除會(huì)大大降低數(shù)據(jù)統(tǒng)計(jì)的可靠程度,所以會(huì)將爬取的數(shù)據(jù)通過(guò)指定列名的形式來(lái)逐行遍歷,利用fillna()函數(shù)進(jìn)行插補(bǔ)。主要代碼如下:df=lagou.reset_index(drop=True)print(df.isnull().sum()df.loc[:,'salary']=df.loc[:,'salary'].fillna(df['salary'].mode()[0])print(df.isnull().sum())數(shù)據(jù)規(guī)范化拆分和整合數(shù)據(jù)通過(guò)觀察兩個(gè)csv的數(shù)據(jù),發(fā)現(xiàn)有些字段是只有拉勾網(wǎng)有的,泰迪內(nèi)推網(wǎng)沒(méi)有,保留兩個(gè)網(wǎng)站相同的字段。使用drop函數(shù)去除數(shù)據(jù)不完整的行。在fristtype列中可以發(fā)現(xiàn)許多有用的數(shù)據(jù)是通過(guò)“|”相連在一起的,不滿足數(shù)據(jù)處理?xiàng)l件,需要將此列數(shù)據(jù)先進(jìn)行拆分。在對(duì)應(yīng)的工作崗位列表中存在如“大數(shù)據(jù)開(kāi)發(fā)工程師”、“產(chǎn)品統(tǒng)計(jì)員”、“后端研發(fā)工程師”這樣不包含所查詢關(guān)鍵詞的崗位名稱,同時(shí)也會(huì)存在首字母英文大小寫不統(tǒng)一的情況,所有異常情況都需要進(jìn)行統(tǒng)一化處理。具體代碼如下:J=j.split('|')k=k.replace('python','Python')I=i.replace('c++','C++')M=m.relace('java','Java')數(shù)據(jù)加工在“工作領(lǐng)域”列和“公司福利”列當(dāng)中有的數(shù)據(jù)帶有多余括號(hào),需要利用正則表達(dá)式去掉中英文括號(hào)及其內(nèi)容以便使數(shù)據(jù)看起來(lái)美觀,具體代碼如下:i=re.sub('\[.*?\]','',i)i=re.sub('(.*?)','',i)初步清洗后的數(shù)據(jù)集中,地區(qū)數(shù)據(jù)之后對(duì)區(qū)級(jí)地區(qū)用drop函數(shù)進(jìn)行刪除,為更好的進(jìn)行統(tǒng)計(jì)分析,本次實(shí)驗(yàn)只保留市級(jí)地區(qū),。在“薪資”列當(dāng)中會(huì)出現(xiàn)薪資不統(tǒng)一的情況如:10k-15K,也有****元的月薪資,為便于薪資統(tǒng)一單位,本課題將單位都統(tǒng)一成“K/月”的形式。針對(duì)薪資是一個(gè)區(qū)間的顯示形式,采取平均數(shù)的方式來(lái)處理。如出現(xiàn)“6-9K/月”在清洗后就會(huì)得到“7.5K/月”的結(jié)果。處理結(jié)果保留一位小數(shù),具體代碼如下:mean_salary=(’min_sal’+’max_sal’)/2salary='-'.join((str(‘最低工資’),str(‘最高工資’)))+'K/月'在數(shù)據(jù)清洗過(guò)后,前后對(duì)比如圖31、圖32所示。本次實(shí)驗(yàn)一共有2585條數(shù)據(jù)。圖31數(shù)據(jù)清洗前圖32數(shù)據(jù)清洗后數(shù)據(jù)可視化分析各地區(qū)招聘人數(shù)分析首先對(duì)數(shù)據(jù)按熱門城市進(jìn)行分類處理,再對(duì)每個(gè)城市的招聘信息進(jìn)行分析,各熱門城市的數(shù)據(jù)分析師崗位招聘人數(shù)統(tǒng)計(jì)情況如圖41所示。圖41全國(guó)招聘人數(shù)情況從圖4-1中可以看出,數(shù)據(jù)分析師崗位招聘人數(shù)較多的前幾個(gè)地區(qū)分別是廣東、北京、浙江和上海。這四個(gè)省份作為我國(guó)最為發(fā)達(dá)的城市,經(jīng)濟(jì)發(fā)展和數(shù)字化水平都相對(duì)較高。本次實(shí)驗(yàn)因?yàn)椴捎昧颂┑蟽?nèi)推網(wǎng)的招聘信息,大部分?jǐn)?shù)據(jù)來(lái)自于廣東,所以廣東的招聘人數(shù)也會(huì)相對(duì)偏多一點(diǎn)。北京作為軟件產(chǎn)業(yè)聚集區(qū),擁有大量的國(guó)有企業(yè)和頭部企業(yè),對(duì)數(shù)據(jù)人才的需求相較于其他身份有更多的需求。學(xué)歷情況分析學(xué)歷占比圖對(duì)企業(yè)招聘要求最低學(xué)歷進(jìn)行分析,如圖42所示。圖42學(xué)歷要求占比圖從圖4-2中看出,大部分的企業(yè)還是要求本科學(xué)歷,占比達(dá)到了百分之九十,只有極少部分會(huì)要求碩士學(xué)歷。數(shù)據(jù)分析師崗位要求具備良好的數(shù)學(xué)基礎(chǔ),能熟練應(yīng)用各種數(shù)據(jù)分析軟件進(jìn)行數(shù)據(jù)的處理和可視化分析,并根據(jù)分析結(jié)果提出改善的可行性建議或方案,是一個(gè)復(fù)合型的技術(shù)技能型人才,相對(duì)來(lái)說(shuō)本科層次的畢業(yè)生可以滿足一般企業(yè)的數(shù)據(jù)分析要求,而??茖哟蔚膶W(xué)生由于缺乏扎實(shí)的數(shù)學(xué)功底,在數(shù)據(jù)分析領(lǐng)域顯得有點(diǎn)力不從心,碩士研究生主要從事數(shù)據(jù)建模和算法的改進(jìn)工作,相對(duì)來(lái)說(shuō)崗位需求不多。工作經(jīng)驗(yàn)占比分析工作經(jīng)驗(yàn)占比如圖43所示。圖43工作經(jīng)歷占比從圖4-3中可以看出,招聘公司對(duì)工作3-5年的人需求量較大,因?yàn)檫@一批人自身也已經(jīng)擁有較為成熟的技術(shù)體系,對(duì)薪資要求又低于相比資歷高的管理層。大部分招聘信息中的工作經(jīng)驗(yàn)主要包括工作資歷和工作內(nèi)容兩部分。招聘信息都會(huì)對(duì)招聘崗位的工作經(jīng)驗(yàn)進(jìn)行明確說(shuō)明,相較于應(yīng)屆畢業(yè)生,企業(yè)通常喜歡招聘有工作經(jīng)驗(yàn)的員工,這樣可以降低培訓(xùn)的成本,提升工作的效率。企業(yè)出于成本控制、業(yè)務(wù)熟練、管理便捷等目的對(duì)應(yīng)聘者往往有工作經(jīng)驗(yàn)?zāi)晗抟?。?jì)算機(jī)相關(guān)專業(yè)招聘信息中對(duì)工作經(jīng)驗(yàn)是有較為強(qiáng)烈的要求,其中對(duì)有3~5年、5~7年工作經(jīng)驗(yàn)的崗位需求最高。部分企業(yè)自身發(fā)展已具備一定的市場(chǎng)占有率,技術(shù)水平已經(jīng)趨于成熟,才會(huì)去招聘一些工作經(jīng)驗(yàn)較低或者一些實(shí)習(xí)生。具有7年以上、10年以上經(jīng)驗(yàn)的招聘信息少,或者體現(xiàn)此類員工往往已身居高職,發(fā)布崗位數(shù)本有限,或者體現(xiàn)這類員工業(yè)務(wù)能力有限,長(zhǎng)期未得晉升,因此所占比例不高。地區(qū)工資對(duì)比分析不同地區(qū)的最低工資和最高工資對(duì)比如圖44所示。圖44地區(qū)最低工資和最高工資對(duì)比上述實(shí)驗(yàn)對(duì)比了不同地區(qū)的最低工資和最高工資,選擇了幾個(gè)經(jīng)濟(jì)實(shí)力不錯(cuò)的城市來(lái)進(jìn)行對(duì)比,發(fā)現(xiàn)各地區(qū)的最低工資基本是沒(méi)有太大差距。對(duì)成都、南京這兩個(gè)城市的最低工資相比北京、上海、深圳這幾個(gè)城市要高,可能是由于本次實(shí)驗(yàn)中對(duì)成都、南京收集的數(shù)據(jù)較少造成的。通過(guò)觀察不同地區(qū)的最高工資發(fā)現(xiàn)北京、廣州、上海、深圳這幾個(gè)城市在最高工資相比其他城市是遠(yuǎn)遠(yuǎn)大于的。這也側(cè)面說(shuō)明在這幾個(gè)經(jīng)濟(jì)發(fā)展不錯(cuò)的城市,付得起高額工資。對(duì)經(jīng)濟(jì)高質(zhì)量發(fā)展的城市,城市的生活成本也會(huì)提高,對(duì)工資也有一定的影響。主要城市薪資水平分析對(duì)主要城市薪資水平制作成箱線圖,如圖45所示。圖45主要城市薪資水平箱線圖從圖4-5中可以看出,深圳的薪資水平相對(duì)較高,最低工資和最高工資水平都明顯高于其他城市。北京的兩極分化較為嚴(yán)重。北京、上海、深圳三個(gè)城市的平均薪資都超過(guò)了2w可以看出這三個(gè)地區(qū)的經(jīng)濟(jì)發(fā)展情況。廣州的薪資在本次實(shí)驗(yàn)中,因?yàn)樘┑蟽?nèi)推網(wǎng)的大部分?jǐn)?shù)據(jù)來(lái)源是在廣州,其中實(shí)習(xí)生的崗位較多,可能適當(dāng)了拉低的薪資的水平。公司類型占比分析對(duì)公司類型占比進(jìn)行分析,為了保證實(shí)驗(yàn)分析的美觀性,剔除了一些個(gè)別數(shù)據(jù)量較少的公司類型,如圖46所示。圖46公司類型top5從圖4-6中可以看出,大部分的公司類型都是合資類型的公司,這類企業(yè)由于信息化意識(shí)較強(qiáng),企業(yè)的信息化水平普遍較高,并積累了大量的業(yè)務(wù)數(shù)據(jù)和生產(chǎn)數(shù)據(jù),因此對(duì)數(shù)據(jù)分析人員的需求較為迫切;相較于合資企業(yè),未融資的企業(yè)其業(yè)務(wù)處于前期發(fā)展階段,公司人才缺乏,也迫切需要具有大數(shù)據(jù)相關(guān)的人才來(lái)提升企業(yè)員工的信息化整體水平。薪資均值中位數(shù)分析各工作年限薪資均值中位數(shù)比較,如圖47所示。圖47各工作年限薪資均值中位數(shù)從圖4-7中看出,工作年限越大工資薪資和中位數(shù)都會(huì)有一個(gè)很大的提高,本次實(shí)驗(yàn)中采集的5-7年數(shù)據(jù)量較少,并不能將5-7年工作年限的薪資作為代表,但是不影響實(shí)驗(yàn)分析。相對(duì)來(lái)講,應(yīng)屆生的工資水平普遍較低,與具有1-3工作經(jīng)驗(yàn)的薪資水平差距不大。隨著工作年限的增加,具有3年以上工作經(jīng)驗(yàn)的數(shù)據(jù)分析師崗位,其工資水平將直線上升,說(shuō)明這個(gè)崗位是一個(gè)需要累積豐富經(jīng)驗(yàn)的崗位。公司福利詞云分析對(duì)公司福利進(jìn)行詞云分析,如圖48所示。圖48公司福利詞云公司福利多以基本福利頻數(shù)最高,如“五險(xiǎn)一金”、“年底雙薪”、“帶薪年假”、“周末雙休”、“定期體檢”等。企業(yè)是由員工組成的,所以對(duì)員工重要的企業(yè)福利當(dāng)然也對(duì)企業(yè)很重要。企業(yè)對(duì)優(yōu)秀人才的競(jìng)爭(zhēng)力,主要靠企業(yè)本身的實(shí)力、薪酬和員工福利來(lái)組成的,而企業(yè)實(shí)力本身又與員工息息相關(guān)。企業(yè)也要對(duì)員工福利要重視,員工對(duì)企業(yè)也要上心,只有企業(yè)發(fā)展更好了,才有更好的員工福利??偨Y(jié)總結(jié)本文使用Python對(duì)拉勾網(wǎng)、泰迪內(nèi)推網(wǎng)爬取招聘信息并進(jìn)行可視化分析,這一工作整體分為三個(gè)模塊。首先是對(duì)數(shù)據(jù)的采集數(shù)據(jù)需要進(jìn)行爬蟲(chóng)編寫,并保存到csv文件以備后續(xù)分析,接下來(lái)是數(shù)據(jù)預(yù)處理階段,對(duì)數(shù)據(jù)進(jìn)行清洗和規(guī)范化處理,最后是數(shù)據(jù)可視化分析,對(duì)需要進(jìn)行分析的數(shù)據(jù)從不同維度、不同形式進(jìn)行可視化展示,將復(fù)雜的數(shù)據(jù)通過(guò)圖表直觀形象地展現(xiàn)出來(lái)。本課題數(shù)據(jù)分析的結(jié)果可為網(wǎng)上求職者提供一定的參考,對(duì)想要從事大數(shù)據(jù)開(kāi)發(fā)、算法工程師、Python工程師等具有一定的借鑒價(jià)值?;ヂ?lián)網(wǎng)行業(yè)對(duì)技術(shù)類人才需求較大,其中高學(xué)歷人才和3-5年工作經(jīng)歷的人尤其受歡迎。對(duì)廣州、上海、北京、深圳這幾個(gè)城市,他們的經(jīng)濟(jì)實(shí)力都很強(qiáng),對(duì)人才的需求量也是相對(duì)其他城市會(huì)多的多。如果要成功轉(zhuǎn)行,應(yīng)該往北上廣深行這幾個(gè)城市考慮,這些城市的薪資水平高。行業(yè)方面應(yīng)該著眼于互聯(lián)網(wǎng)及電子商務(wù)等新興行業(yè),這些行業(yè)對(duì)該崗位的需求都比較大,而且薪資水平也普遍高工作經(jīng)驗(yàn)對(duì)于該崗位而言非常重要,能否成功轉(zhuǎn)行的關(guān)鍵門檻在于是否有工作經(jīng)驗(yàn),與薪資水平呈正相關(guān),轉(zhuǎn)行成功以后,只有在邁過(guò)3年這個(gè)坎,才會(huì)有比較大的突破。從薪資水平方面來(lái)看,本科是一個(gè)分水嶺是否是本科,對(duì)薪資水平的影響還是很大的,而本科與碩士之間并沒(méi)有特別大的差距,博士的薪資水平遠(yuǎn)遠(yuǎn)高于其他學(xué)歷。從學(xué)歷方面來(lái)看,要求本科學(xué)歷占據(jù)絕大多數(shù),部分制造企業(yè)統(tǒng)計(jì)崗位對(duì)學(xué)歷的門檻要求并不是很高;數(shù)據(jù)分析師崗位對(duì)碩士、博士學(xué)歷的需求較少,這主要是由數(shù)據(jù)分析師復(fù)合型人才的需求決定的。展望在大數(shù)據(jù)時(shí)代,數(shù)據(jù)的處理、分析和可視化顯得尤為重要,企業(yè)在生產(chǎn)經(jīng)營(yíng)過(guò)程中存在的各種問(wèn)題,都可以通過(guò)大數(shù)據(jù)技術(shù)進(jìn)行直觀的展示。Python語(yǔ)言因其開(kāi)源性、豐富的擴(kuò)展庫(kù)、可移植性、可擴(kuò)展性等特點(diǎn),已得到越來(lái)越多的用戶的認(rèn)可,目前很多大型企業(yè)如阿里、騰訊、谷歌等都在高薪聘任Python開(kāi)發(fā)人員。馬云曾說(shuō)“想在未來(lái)拿高薪,就去做與數(shù)據(jù)分析相關(guān)的工作”,未來(lái)與數(shù)據(jù)和數(shù)據(jù)分析有關(guān)的技能將變得非常有價(jià)值。本課題設(shè)計(jì)的對(duì)拉勾網(wǎng)的爬蟲(chóng)存在一些小漏洞,拉勾網(wǎng)的防爬技術(shù)做的較為完善,當(dāng)用戶使用自己cookie值去訪問(wèn)時(shí),如果訪問(wèn)速度過(guò)快,拉勾網(wǎng)將會(huì)檢測(cè)用戶的ip。對(duì)用戶的ip進(jìn)行封禁。應(yīng)當(dāng)使用selenium庫(kù)進(jìn)行仿人工操作,這樣不容易被拉勾網(wǎng)檢測(cè)到?;蛘呤褂么韎p進(jìn)行對(duì)拉勾網(wǎng)的訪問(wèn),一般是需要龐大的數(shù)據(jù)量才會(huì)用到。但是對(duì)用戶而言爬蟲(chóng)其實(shí)是給網(wǎng)站的服務(wù)器增加負(fù)擔(dān)量。用戶在使用爬蟲(chóng)過(guò)程中應(yīng)當(dāng)遵守robot協(xié)議,爬取網(wǎng)站時(shí),切記不要給網(wǎng)站增加額外大量的運(yùn)算。參考文獻(xiàn)鄭麗琳,溫茵茵.基于大數(shù)據(jù)分析的工程造價(jià)專業(yè)人才需求及目標(biāo)薪酬實(shí)證研究[J].高等建筑教育,2022,31(03):43-51.LiW,WangGG,GandomiAH.ASurveyofLearning-BasedIntelligentOptimizationAlgorithms[J].ArchivesofComputationalMethodsinEngineering,2021,28(5):3781-3799.趙婉彤.基于PHP與MySQL的動(dòng)態(tài)網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2022(08):103-105+109.DOI:10.16184/prg.2022.08.022.劉穎斐,徐子萌.員工學(xué)歷水平影響企業(yè)的戰(zhàn)略選擇嗎[J].珞珈管理評(píng)論,2021(03):46-68.鄧子婧,毛紅霞.基于Python對(duì)招聘網(wǎng)的數(shù)據(jù)采集與分析[J].現(xiàn)代工業(yè)經(jīng)濟(jì)和信息化,2021,11(11):125-127.DOI:10.16525/ki.14-1362/n.2021.11.049.文鵬,袁小艷.基于Python的招聘信息爬取和分析[J].信息與電腦(理論版),2021,33(09):65-67.XianghuaC,uxiuX,FulinC,etal.Anefficientauctionmechanismforregionallogisticssynchronization[J].JournalofIntelligentManufacturing,2019,30:2715–2731.毛遂,毛紅霞.基于51job網(wǎng)站招聘信息的爬取與分析——以Python技術(shù)崗位為例[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2021(04):47-49.姜霞,張俊威.發(fā)達(dá)城市經(jīng)濟(jì)高質(zhì)量發(fā)展比較研究——以北京、上海、廣州、深圳為例[J].科技創(chuàng)業(yè)月刊,2020,33(04):15-20.馬寧,陳曦,張李銘.基于Selenium與Openpyxl的Web腳本自動(dòng)化設(shè)計(jì)研究[J].電腦知識(shí)與技術(shù),2020,16(01):51-53+70.DOI:10.14004/ki.ckt.2020.0024.劉暢.數(shù)據(jù)類崗位招聘需求信息研究[D].蘭州財(cái)經(jīng)大學(xué),2019.趙金丹.基于selenium的web自動(dòng)化測(cè)試腳本設(shè)計(jì)研究[J].科技傳播,2014,6(01):94-95.EstebanA,ZafraA,RomeroCHelpinguniversitystudentstochooseelectivecoursesbyusingahybridmulticriteriarecommendationsystemwithgeneticoptimization[J].Knowledge-BasedSystems,2020,194(12):105385.作品(軟件)使用說(shuō)明書附錄1:泰迪內(nèi)推(xpath方法)源代碼importpandasaspdimportnumpyasnpfromseleniumimportwebdriverfromselenium.webdriverimportActionChainsfromselenium.webdriver.chrome.serviceimportServicefrommon.byimportByimportreimporttime#fromwimportselectionurl='/#/jobList'browser=webdriver.Chrome()browser.get(url)basic_info={'job':[],'salary':[],'Education':[],'Experience':[],'Recruits':[],'Category':[],'Scale':[],'Company':[],'DataTime':[]}require_bottle_total=browser.find_element(by=By.XPATH,value='//div[@class="pagination"]/div[@class="el-pagination"]/ul[@class="elr"]/li[8]').textclick_count=int(require_bottle_total)-5foriinnp.arange(1,6,1):ifi==1:time.sleep(2)ele='//div[@class="pagination"]/div[@class="el-pagination"]/ul[@class="elr"]/li[{s}]'.format(s=i)element=browser.find_element(by=By.XPATH,value=ele)element.click()print('正在進(jìn)行第'+element.text+'頁(yè)數(shù)據(jù)爬取,請(qǐng)稍后!')time.sleep(0.1)forsinnp.arange(1,11,1):forcinnp.arange(1,6,1):ifc==1:forba_1innp.arange(1,3,1):ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="jobInfo"]/h5[@class="tit"]/span[{x}]'.format(y=s,x=ba_1)element=browser.find_element(by=By.XPATH,value=ele)ifba_1==1:basic_info['job'].append(element.text)else:basic_info['salary'].append(element.text)elifc==2:forba_2innp.arange(1,4,1):ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="jobInfo"]/div[@class="textInfo"]/span[{x}]'.format(y=s,x=ba_2)element=browser.find_element(by=By.XPATH,value=ele)ifba_2==1:basic_info['Education'].append(element.text)elifba_2==2:basic_info['Experience'].append(element.text)elifba_2==3:basic_info['Recruits'].append(element.text)elifc==3:forba_3innp.arange(1,3,1):ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="companyInfo"]/div[@class="textInfo"]/span[{x}]'.format(y=s,x=ba_3)element=browser.find_element(by=By.XPATH,value=ele)ifba_3==1:basic_info['Scale'].append(element.text)else:basic_info['Category'].append(element.text)elifc==4:ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="companyInfo"]/h5[@class="tit"]'.format(y=s)element=browser.find_element(by=By.XPATH,value=ele)basic_info['Company'].append(element.text)elifc==5:ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="bot"]/div[@class="dateTime"]'.format(y=s)element=browser.find_element(by=By.XPATH,value=ele)basic_info['DataTime'].append(element.text)ifi==5:forhuoquinnp.arange(1,click_count-1,1):ele='//div[@class="pagination"]/div[@class="el-pagination"]/ul[@class="elr"]/li[6]'element_s=browser.find_element(by=By.XPATH,value=ele)print('正在進(jìn)行第'+format(element_s.text)+'頁(yè)數(shù)據(jù)爬取,請(qǐng)稍后!')element_s.click()time.sleep(0.1)forsinnp.arange(1,11,1):forcinnp.arange(1,6,1):ifc==1:forba_1innp.arange(1,3,1):ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="jobInfo"]/h5[@class="tit"]/span[{x}]'.format(y=s,x=ba_1)element=browser.find_element(by=By.XPATH,value=ele)ifba_1==1:basic_info['job'].append(element.text)else:basic_info['salary'].append(element.text)elifc==2:forba_2innp.arange(1,4,1):ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="jobInfo"]/div[@class="textInfo"]/span[{x}]'.format(y=s,x=ba_2)element=browser.find_element(by=By.XPATH,value=ele)ifba_2==1:basic_info['Education'].append(element.text)elifba_2==2:basic_info['Experience'].append(element.text)elifba_2==3:basic_info['Recruits'].append(element.text)elifc==3:forba_3innp.arange(1,3,1):ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="companyInfo"]/div[@class="textInfo"]/span[{x}]'.format(y=s,x=ba_3)element=browser.find_element(by=By.XPATH,value=ele)ifba_3==1:basic_info['Scale'].append(element.text)else:basic_info['Category'].append(element.text)elifc==4:ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="companyInfo"]/h5[@class="tit"]'.format(y=s)element=browser.find_element(by=By.XPATH,value=ele)basic_info['Company'].append(element.text)elifc==5:ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="bot"]/div[@class="dateTime"]'.format(y=s)element=browser.find_element(by=By.XPATH,value=ele)basic_info['DataTime'].append(element.text)ifint(element_s.text)==(int(require_bottle_total)-2):forzuihouinnp.arange(7,9,1):ifzuihou==8:ele='//div[@class="pagination"]/div[@class="el-pagination"]/ul[@class="elr"]/li[{p}]'.format(p=zuihou)element=browser.find_element(by=By.XPATH,value=ele)element.click()time.sleep(0.1)page_divcount=len(browser.find_elements(by=By.XPATH,value='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div'))print('正在進(jìn)行第'+format(element_s.text)+'頁(yè)數(shù)據(jù)爬取,請(qǐng)稍后!')forlen_divinnp.arange(1,page_divcount+1,1):forcinnp.arange(1,6,1):ifc==1:forba_1innp.arange(1,3,1):ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="jobInfo"]/h5[@class="tit"]/span[{x}]'.format(y=len_div,x=ba_1)element=browser.find_element(by=By.XPATH,value=ele)ifba_1==1:basic_info['job'].append(element.text)else:basic_info['salary'].append(element.text)elifc==2:forba_2innp.arange(1,4,1):ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="jobInfo"]/div[@class="textInfo"]/span[{x}]'.format(y=len_div,x=ba_2)element=browser.find_element(by=By.XPATH,value=ele)ifba_2==1:basic_info['Education'].append(element.text)elifba_2==2:basic_info['Experience'].append(element.text)elifba_2==3:basic_info['Recruits'].append(element.text)elifc==3:forba_3innp.arange(1,3,1):ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="companyInfo"]/div[@class="textInfo"]/span[{x}]'.format(y=len_div,x=ba_3)element=browser.find_element(by=By.XPATH,value=ele)ifba_3==1:basic_info['Scale'].append(element.text)else:basic_info['Category'].append(element.text)elifc==4:ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="top"]/div[@class="companyInfo"]/h5[@class="tit"]'.format(y=len_div)element=browser.find_element(by=By.XPATH,value=ele)basic_info['Company'].append(element.text)elifc==5:ele='//div[@class="container"]/div[2]//ul[@class="jobListMore"]/div[{y}]/li/div[@class="bot"]/div[@class="dateTime"]'.format(y=len_div)element=browser.find_element(by=By.XPATH,value=ele)basic_info['DataTime'].append(element.text)break;ele='//div[@class="pagination"]/div[@class="el-pagination"]/ul[@class="elr"]/li[{p}]'.format(p=zuihou)element=browser.find_element(by=By.XPATH,value=ele)print('正在進(jìn)行第'+format(element.text)+'頁(yè)數(shù)據(jù)爬取,請(qǐng)稍后!')element.click()

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論