• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Python的51-job數(shù)據(jù)抓取程序設(shè)計(jì)

      2018-07-06 06:08:58崔玉嬌孫結(jié)冰祁曉波
      無(wú)線電通信技術(shù) 2018年4期
      關(guān)鍵詞:解析器選擇器爬蟲(chóng)

      崔玉嬌,孫結(jié)冰,祁曉波,凌 強(qiáng),朱 勇

      (黑龍江大學(xué) 電子工程學(xué)院,黑龍江 哈爾濱 150080)

      0 引言

      隨著互聯(lián)網(wǎng)時(shí)代的高速發(fā)展,大量的數(shù)據(jù)可以通過(guò)互聯(lián)網(wǎng)來(lái)獲得,可以足不出戶就能獲知世界上的千變?nèi)f化[1]。我們可以在互聯(lián)網(wǎng)上獲取招聘信息,而不再局限于報(bào)紙、雜志等紙質(zhì)媒介,這使得求職者可以快速有效地獲得心儀的招聘信息。每年的9月和4月都是畢業(yè)生找工作的高峰時(shí)期,快速有效地獲得招聘信息成為求職過(guò)程中關(guān)鍵一步。為此,本文設(shè)計(jì)了一款基于python的爬蟲(chóng)程序,目前國(guó)內(nèi)比較著名的求職軟件有“智聯(lián)招聘”“前程無(wú)憂”“58同城”等,本文主要對(duì)“前程無(wú)憂”的招聘信息進(jìn)行抓取并分析?,F(xiàn)有的數(shù)據(jù)抓取程序抓取方式單一,用戶不能選擇最快的抓取方法,該程序針對(duì)此問(wèn)題進(jìn)行了進(jìn)一步的優(yōu)化,設(shè)計(jì)3種數(shù)據(jù)抓取的方法,用戶可自行選擇,并且可以輸入關(guān)鍵字,匹配招聘信息的地點(diǎn)。設(shè)計(jì)更合理,則用戶使用體驗(yàn)效果會(huì)更好[2]。

      本文提出的程序通過(guò)爬蟲(chóng)獲取職位信息,包括:工作名稱(chēng)、標(biāo)題、地點(diǎn)、公司名稱(chēng)、待遇范圍、工作內(nèi)容、招聘網(wǎng)址以及發(fā)布日期。并將獲得的信息保存在本地,以供后續(xù)的數(shù)據(jù)挖掘及分析。本文的爬蟲(chóng)程序包含3種爬蟲(chóng)的方法,包括Re、XPath、BeatuifulSoup,用戶可以自行選擇想要的爬蟲(chóng)方法,并且輸入職位的關(guān)鍵詞,通過(guò)關(guān)鍵詞匹配,獲得相應(yīng)的職位信息。

      1相關(guān)概念

      1.1 Python語(yǔ)言

      Python語(yǔ)言語(yǔ)法簡(jiǎn)單清晰、功能強(qiáng)大,容易理解??梢栽赪indows、Linux等操作系統(tǒng)上運(yùn)行;Python是一種面向?qū)ο蟮恼Z(yǔ)言,具有效率高、可簡(jiǎn)單地實(shí)現(xiàn)面向?qū)ο蟮木幊痰葍?yōu)點(diǎn)[3-4]。Python是一種腳本語(yǔ)言,語(yǔ)法簡(jiǎn)潔且支持動(dòng)態(tài)輸入,使得Python在很多操作系統(tǒng)平臺(tái)上都是一個(gè)比較理想的腳本語(yǔ)言,尤其適用于快速的應(yīng)用程序開(kāi)發(fā)[5]。Python 包括針對(duì)網(wǎng)絡(luò)協(xié)議的各個(gè)層次進(jìn)行抽象封裝的網(wǎng)絡(luò)協(xié)議標(biāo)準(zhǔn)庫(kù),這使得使用者可以對(duì)程序邏輯進(jìn)行進(jìn)一步的優(yōu)化。其次,Python 非常擅長(zhǎng)處理字節(jié)流的各種模式,具有很快的開(kāi)發(fā)速度[6-7]。

      1.2 網(wǎng)絡(luò)爬蟲(chóng)

      網(wǎng)絡(luò)爬蟲(chóng)[8](Web Crawler),是一種按照一定的規(guī)則,自動(dòng)提取Web網(wǎng)頁(yè)的應(yīng)用程序或者腳本,它是在搜索引擎上完成數(shù)據(jù)抓取的關(guān)鍵一步,可以在Internet上下載網(wǎng)站頁(yè)面。爬蟲(chóng)是為了將Internet上的網(wǎng)頁(yè)保存到本地,以供參考[9-10]。爬蟲(chóng)是從一個(gè)或多個(gè)初始頁(yè)面的URL,通過(guò)分析頁(yè)面源文件的URL,抓取新的網(wǎng)頁(yè)鏈接,通過(guò)這些網(wǎng)頁(yè)鏈接,再繼續(xù)尋找新的網(wǎng)頁(yè)鏈接[11],反復(fù)循環(huán),直到抓取和分析所有頁(yè)面。當(dāng)然這是理想情況下的執(zhí)行情況,根據(jù)現(xiàn)在公布的數(shù)據(jù),最好的搜索引擎也只爬取整個(gè)互聯(lián)網(wǎng)不到一半的網(wǎng)頁(yè)[12]。

      2 程序設(shè)計(jì)

      本文的爬蟲(chóng)程序主要分為5個(gè)模塊,首先根據(jù)Request URL獲取需要爬取數(shù)據(jù)的頁(yè)面,通過(guò)Re、XPath、BeautifulSoup三種方法,利用關(guān)鍵詞篩選符合條件的職位信息,其中包括工作名稱(chēng)、標(biāo)題、地點(diǎn)、公司名稱(chēng)、待遇范圍、工作內(nèi)容、招聘網(wǎng)址以及發(fā)布日期,并保存在本地,以便后續(xù)的數(shù)據(jù)挖掘及分析。

      2.1 獲取網(wǎng)頁(yè)信息

      爬取網(wǎng)頁(yè)信息之前需要獲取網(wǎng)頁(yè)的信息,并從中找出需要的信息進(jìn)行抓取。首先打開(kāi)Chrome瀏覽器,進(jìn)入前程無(wú)憂的網(wǎng)頁(yè),打開(kāi)開(kāi)發(fā)者選項(xiàng),找到其中的network,獲取URL以及請(qǐng)求頭中的headers[13]。在preview中可以看到當(dāng)前網(wǎng)頁(yè)的源代碼,可以從源代碼中找到需要爬取的信息,即工作名稱(chēng)、標(biāo)題、地點(diǎn)、公司名稱(chēng)、待遇范圍、工作內(nèi)容、招聘網(wǎng)址以及發(fā)布日期,并找出當(dāng)前頁(yè)與下一頁(yè)的offset值,以便在以下的爬蟲(chóng)設(shè)計(jì)中使用。

      2.2 主程序設(shè)計(jì)

      將BeautifulSoup、XPath、Regex三種方法的文件名打包成字典,并標(biāo)上序號(hào),設(shè)計(jì)進(jìn)入程序的頁(yè)面,在頁(yè)面上顯示提示信息,請(qǐng)用戶選擇一種爬蟲(chóng)方法,根據(jù)用戶的選擇,進(jìn)入對(duì)應(yīng)的程序,待用戶輸入需要查詢的職位關(guān)鍵詞之后啟動(dòng)爬蟲(chóng)程序,開(kāi)始抓取數(shù)據(jù)[14]。在抓取完畢之后,提示用戶數(shù)據(jù)抓取完畢,以保存至本地文件,以供用戶的使用及分析。

      2.3 Re程序設(shè)計(jì)

      正則表達(dá)式(Re)是對(duì)字符串(包括普通字符(例如,a~z 之間的字母)和特殊字符(稱(chēng)為“元字符”))操作的一種邏輯公式,就是用事先定義好的一些特定字符及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”[15],這個(gè)“規(guī)則字符串”用來(lái)表達(dá)對(duì)字符串的一種過(guò)濾邏輯。正則表達(dá)式是一種文本模式,模式描述在搜索文本時(shí)要匹配的一個(gè)或多個(gè)字符串。

      根據(jù)上文獲取的網(wǎng)頁(yè)信息,可以將所需信息的字符串用Re表示出來(lái),其中:

      ‘.*?/.*?(d+)’ #獲取當(dāng)前頁(yè)數(shù)

      .*?

      ‘'.*?

      .*?

      ‘ ’#獲取工作地點(diǎn)

      ‘’#獲取工資

      ‘’#獲取工作發(fā)布的日期

      (.*?)

      通過(guò)獲取的日期,用戶可以了解最新的職位信息。根據(jù)職位的詳細(xì)信息,求職者可以快速地了解到公司的要求以及職位的相關(guān)工作信息。通過(guò)上述的正則表達(dá)式獲取的信息,存入本地的Excel文件,方便求職者查看。

      2.4 XPath程序設(shè)計(jì)

      XPath即為XML路徑語(yǔ)言,它是一種用來(lái)確定XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)文檔中某部分位置的語(yǔ)言[16]。XPath基于XML的樹(shù)狀結(jié)構(gòu),有不同類(lèi)型的節(jié)點(diǎn),包括元素節(jié)點(diǎn)、屬性節(jié)點(diǎn)和文本節(jié)點(diǎn),提供在數(shù)據(jù)結(jié)構(gòu)樹(shù)中找尋節(jié)點(diǎn)的能力。起初XPath的提出的初衷是將其作為一個(gè)通用的、介于XPointer與XSLT間的語(yǔ)法模型。但是XPath很快地被開(kāi)發(fā)者采用來(lái)當(dāng)作小型查詢語(yǔ)言。

      XPath相對(duì)于Re簡(jiǎn)單一些,Re語(yǔ)言容易出錯(cuò),導(dǎo)致無(wú)法正確地獲得需要的信息,通??梢栽贑hrome中添加X(jué)Path Helper插件,可以在查看網(wǎng)頁(yè)源代碼是直接復(fù)制成XPath的格式,方便且通常不容易出錯(cuò)。

      在XPath程序中,其中:

      ‘div[@class="rt"]/span[@class="dw_c_orange"]’#獲取當(dāng)前頁(yè)數(shù)

      ‘∥div[@id='resultList']/div[@class='el']’#獲取工作列表

      ‘./p[@class='t1 ']/span/a’#獲取工作名稱(chēng)

      ‘./p[@class='t1 ']/span/a/attribute::href’#獲取職位鏈接

      ‘./span[@class='t2']/a/text()’#獲取公司名稱(chēng)

      ‘./span[@class='t3']/text()’#獲取工作地點(diǎn)

      ‘./span[@class='t4']/text()’#獲取工資

      ‘./span[@class='t5']/text()’#獲取職位發(fā)布的日期

      ‘∥div[@class='bmsg job_msg inbox']/text()’ #獲取職位詳細(xì)信息

      通過(guò)XPath和Re的代碼對(duì)比,可以明顯發(fā)現(xiàn),XPath的代碼比Re的代碼要簡(jiǎn)潔。

      2.5 BeautifulSoup程序設(shè)計(jì)

      BeautifulSoup提供一些簡(jiǎn)單的、python式的函數(shù)用來(lái)處理導(dǎo)航、搜索、修改分析樹(shù)等功能[16]。它是一個(gè)工具箱,通過(guò)解析文檔為用戶提供需要抓取的數(shù)據(jù),因?yàn)楹?jiǎn)單,所以不需要多少代碼就可以寫(xiě)出一個(gè)完整的應(yīng)用程序。BeautifulSoup自動(dòng)將輸入文檔轉(zhuǎn)換為Unicode編碼,輸出文檔轉(zhuǎn)換為utf-8編碼。不需要考慮編碼方式,除非文檔沒(méi)有指定一個(gè)編碼方式,這時(shí),BeautifulSoup就不能自動(dòng)識(shí)別編碼方式了。然后,僅僅需要說(shuō)明一下原始編碼方式就可以了。

      2.5.1 解析庫(kù)

      本文介紹幾種python解析庫(kù),并作比較,如表1所示,本文所用到的解析器是python標(biāo)準(zhǔn)解析器。

      表1 解析庫(kù)

      解析器使用方法優(yōu)勢(shì)劣勢(shì)Python標(biāo)準(zhǔn)解析器BeautifulSoup(makeup,″html.parser″)Python的內(nèi)置標(biāo)準(zhǔn)庫(kù)、執(zhí)行速度適中、文檔容錯(cuò)能力強(qiáng)Python2.7.3或3.2.2前的版本中文容錯(cuò)能力差lxml HTML解析器BeautifulSoup(makeup,″lxml″)速度快、文檔容錯(cuò)能力強(qiáng)需要安裝C語(yǔ)言庫(kù)lxml XML解析器BeautifulSoup(makeup,″X(qián)ML″)速度快、唯一支持XML的解析器需要安裝C語(yǔ)言庫(kù)html5libBeautifulSoup(makeup,″html5lib″)最好的容錯(cuò)性、以瀏覽器的方式解析文檔、生成HTML5格式的文檔速度慢、不依賴(lài)外部擴(kuò)展

      2.5.2 標(biāo)簽選擇器

      標(biāo)簽選擇器可以選擇元素,獲取名稱(chēng)、屬性、內(nèi)容,可進(jìn)行嵌套的選擇,能夠獲取子節(jié)點(diǎn)、子孫節(jié)點(diǎn)、父節(jié)點(diǎn)、祖先節(jié)點(diǎn)等。標(biāo)簽選擇器可分為標(biāo)準(zhǔn)選擇器和CSS選擇器,標(biāo)簽選擇器可以根據(jù)標(biāo)簽名、屬性、內(nèi)容查找文檔,有兩個(gè)常用的函數(shù),其中,find_all(name,attrs,recursive,text,**kwargs)用來(lái)返回所有符合條件的元素;find(name,attrs,recursive,text,**kwargs)用來(lái)返回第一個(gè)符合條件的元素。CSS選擇器通過(guò)select()直接傳入CSS選擇器即可完成元素的選擇。

      在本文設(shè)計(jì)的程序中,選擇了CSS選擇器,使用select()函數(shù)完成數(shù)據(jù)的選擇,其中:‘int(str(soup.select('div.rt span.dw_c_orange')[0].nextSibling))’#獲取當(dāng)前頁(yè)數(shù)

      ‘div.dw_table > div.el’ #獲取工作列表;

      ‘.p.t1 span a’ #獲取工作名稱(chēng);

      ‘p.t1 span a’ #獲取職位鏈接;

      ‘span.t2 a’ #獲取公司名稱(chēng);

      ‘span.t3’ #獲取工作地點(diǎn);

      ‘span.t4’ #獲取工資;

      ‘.span.t5’ #獲取職位發(fā)布的日期;

      ‘div.job_msg’ #獲取職位詳細(xì)信息

      3 實(shí)驗(yàn)結(jié)果

      利用本文設(shè)計(jì)的爬蟲(chóng)程序,進(jìn)行了如下實(shí)驗(yàn):首先進(jìn)入主程序,點(diǎn)擊運(yùn)行程序,程序返回如圖1的界面。

      接著,如圖2所示,輸入數(shù)字“2”選擇BeautifulSoup解析方式,并輸入關(guān)鍵詞python啟動(dòng)爬蟲(chóng),程序正常運(yùn)行。

      圖2 選擇解析方式并輸入關(guān)鍵詞

      程序運(yùn)行完畢后,在本地文件夾中可以找到以“python職位”命名的Excel文件,打開(kāi)文件可看到如圖3所示的信息。

      圖3 保存到本地的文件

      4 結(jié)束語(yǔ)

      本文根據(jù)Python語(yǔ)言簡(jiǎn)潔易讀的特性設(shè)計(jì)了3種方法的爬蟲(chóng)程序,用戶可以自行選擇數(shù)據(jù)解析的方法,并輸入需要查詢的關(guān)鍵詞,即可從龐大的職位數(shù)據(jù)中提取出需要的數(shù)據(jù),方便快捷。本程序通過(guò)職位的關(guān)鍵詞、工作地點(diǎn)等信息的匹配,在一定程度上為使用者提供了便利。提取出的詳細(xì)的職業(yè)信息描述,可進(jìn)行進(jìn)一步的分詞,并統(tǒng)計(jì)詞頻,觀察單詞出現(xiàn)的頻率,可更加快速地了解公司及相應(yīng)職位的要求,找到符合求職者的招聘信息。

      [1] 房瑾堂.基于網(wǎng)絡(luò)爬蟲(chóng)的在線教育平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2016.

      [2] 王碧瑤.基于Python的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)研究[J].數(shù)字技術(shù)與應(yīng)用,2017(5):76-76.

      [3] 周中華,張惠然,謝江.基于Python的新浪微博數(shù)據(jù)爬蟲(chóng)[J].計(jì)算機(jī)應(yīng)用,2014,34(11):3131-3134.

      [4] 涂小琴.基于Python爬蟲(chóng)的電影評(píng)論情感傾向性分析[J].現(xiàn)代計(jì)算機(jī),2017(35):52-55.

      [5] 郭麗蓉.基于Python的網(wǎng)絡(luò)爬蟲(chóng)程序設(shè)計(jì)[J].電子技術(shù)與軟件工程,2017(23):248-249.

      [6] Lutz M.Learning Python[M].北 京:機(jī)械工業(yè)出版社,2009.

      [7] 劉志凱,張?zhí)t,劉磊.基于Web的Python3編程環(huán)境[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2015,24(7):236-239.

      [8] 王大偉.基于 Python的Web API自動(dòng)化測(cè)試方法研究[J].電子科學(xué)技術(shù),2015,2(5):573-581.

      [9] Hetland M L.Python基礎(chǔ)教程[M].北京:人民郵電出版社,2014:243-245.

      [10] 涂輝,王鋒,商慶偉.Python3編程實(shí)現(xiàn)網(wǎng)絡(luò)圖片爬蟲(chóng)[J].電腦編程技巧與維護(hù),2017(23):21-22.

      [11] 高森.Python網(wǎng)絡(luò)編程基礎(chǔ)[M].北京:電子工業(yè)出版社,2007.

      [12] 周立柱,林玲.聚焦爬蟲(chóng)技術(shù)研究綜述[J].計(jì)算機(jī)應(yīng)用,2005,25(9):1965-1969.

      [13] 姜杉彪,黃凱林,盧昱江,等.基于Python的專(zhuān)業(yè)網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)[J].企業(yè)科技與發(fā)展,2016(8):17-19.

      [14] 陳琳,任芳.基于Python的新浪微博數(shù)據(jù)爬蟲(chóng)程序設(shè)計(jì)[J].信息系統(tǒng)工程,2016(9):97-99.

      [15] 劉娜.Python 正則表達(dá)式高級(jí)特性研究[J].電腦編程技巧與維護(hù),2015(22):12-13.

      [16] 齊鵬,李隱峰,宋玉偉.基于Python的Web數(shù)據(jù)采集技術(shù)[J].電子科技,2012,25(11):118-120.

      猜你喜歡
      解析器選擇器爬蟲(chóng)
      靶通道選擇器研究與優(yōu)化設(shè)計(jì)
      利用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說(shuō)
      基于多解析器的域名隱私保護(hù)機(jī)制
      基于Python的網(wǎng)絡(luò)爬蟲(chóng)和反爬蟲(chóng)技術(shù)研究
      基于Wireshark的列控中心以太網(wǎng)通信協(xié)議解析器的研究與實(shí)現(xiàn)
      如何防御DNS陷阱?常用3種DNS欺騙手法
      利用爬蟲(chóng)技術(shù)的Geo-Gnutel la VANET流量采集
      一種基于無(wú)關(guān)DNS的通信隱私保護(hù)技術(shù)研究
      電子世界(2018年14期)2018-04-15 16:14:25
      四選一數(shù)據(jù)選擇器74LS153級(jí)聯(lián)方法分析與研究
      電腦與電信(2017年6期)2017-08-08 02:04:22
      大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)
      電子制作(2017年9期)2017-04-17 03:00:46
      文水县| 泽普县| 定远县| 临安市| 延津县| 德昌县| 九台市| 清新县| 永修县| 连州市| 吕梁市| 饶平县| 淮南市| 监利县| 金山区| 军事| 衡山县| 静海县| 壤塘县| 新沂市| 邳州市| 海盐县| 如东县| 灵山县| 抚远县| 绍兴市| 翁牛特旗| 曲阜市| 万安县| 东海县| 禄劝| 仪征市| 安平县| 陕西省| 德令哈市| 桓仁| 韩城市| 衡水市| 盐亭县| 定远县| 吉木乃县|