• 
    

    
    

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

      基于Python的拉勾網(wǎng)網(wǎng)絡(luò)爬蟲設(shè)計(jì)與實(shí)現(xiàn)

      2023-06-25 01:30:12馮曉磊
      現(xiàn)代信息科技 2023年6期
      關(guān)鍵詞:網(wǎng)絡(luò)爬蟲

      摘? 要:隨著科學(xué)技術(shù)的發(fā)展,網(wǎng)絡(luò)資源對人們的生活產(chǎn)生巨大的影響,為了進(jìn)一步簡化查找和精準(zhǔn)定位網(wǎng)絡(luò)資源,網(wǎng)絡(luò)爬蟲技術(shù)日漸興起。由于Python語言的強(qiáng)兼容性,基于Python的網(wǎng)絡(luò)爬蟲技術(shù)成為了一種主流爬蟲技術(shù)。針對學(xué)生求職的需求,文章采用基于Python的網(wǎng)絡(luò)爬蟲技術(shù),設(shè)計(jì)拉勾網(wǎng)的崗位信息爬取程序,實(shí)現(xiàn)了對崗位信息的保存,為后續(xù)的查看使用提供便利。

      關(guān)鍵詞:Python;網(wǎng)絡(luò)爬蟲;數(shù)據(jù)解析

      中圖分類號:TP311? ? 文獻(xiàn)標(biāo)識碼:A? 文章編號:2096-4706(2023)06-0085-04

      Design and Implementation of Web Crawler for Lagou APP Based on Python

      FENG Xiaolei

      (Wuhan University of Communication, Wuhan? 430205, China)

      Abstract: With the development of science and technology, network resources have a huge impact on people's lives. In order to further simplify the search and accurately locate the network resources, Web crawler technology is rising day by day. Due to the strong compatibility of Python language, Web crawler technology based on Python has become a mainstream crawler technology. In response to the needs of seeking jobs of students, this paper adopts the Web crawler technology based on Python to design the job information crawling program of Lagou APP, which realizes the saving of job information and provides convenience for the subsequent viewing and using.

      Keywords: Python; Web crawler; data parsing

      0? 引? 言

      近年來,Python語言作為一種新的流行語言,由于其強(qiáng)大的功能模塊和平臺兼容性,尤其在網(wǎng)絡(luò)爬蟲中的應(yīng)用越來越普遍。隨著互聯(lián)網(wǎng)的飛速發(fā)展,給日常生活帶來了較多的便利,也形成了依賴的慣性。但是目前網(wǎng)絡(luò)資源質(zhì)量參差不齊,數(shù)量巨大,往往存在資源查找難,數(shù)據(jù)獲取難得情況,例如,目前應(yīng)用較廣得求職和招人的網(wǎng)站拉勾網(wǎng),為了解決這一難題,本文利用Python語言設(shè)計(jì)拉勾網(wǎng)的網(wǎng)絡(luò)爬蟲,便于進(jìn)一步的數(shù)據(jù)整合提供規(guī)范有效的數(shù)據(jù)源。

      大數(shù)據(jù)時代已經(jīng)到來,網(wǎng)絡(luò)爬蟲技術(shù)已成為這個時代不可或缺的一項(xiàng)技術(shù),企業(yè)需要數(shù)據(jù)來分析用戶行為、產(chǎn)品的不足之處以及競爭對手的信息等,而這一切的首要條件就是數(shù)據(jù)的采集。在互聯(lián)網(wǎng)社會中,數(shù)據(jù)是無價(jià)之寶,一切皆為數(shù)據(jù),誰擁有了大量有用的數(shù)據(jù),誰就擁有了決策的主動權(quán)。如何有效地采集并利用這些信息成了一個巨大的挑戰(zhàn),而網(wǎng)絡(luò)爬蟲是自動采集數(shù)據(jù)的有效手段。網(wǎng)絡(luò)爬蟲是一種按照一定的規(guī)則,自動抓取互聯(lián)網(wǎng)海量信息的程序或腳本。網(wǎng)絡(luò)爬蟲的應(yīng)用領(lǐng)域很廣泛,如搜索引擎、數(shù)據(jù)采集、廣告過濾、大數(shù)據(jù)分析等。

      1? 相關(guān)概念

      1.1? Python

      根據(jù)IEEE Spectrum 2021最新的研究報(bào)告顯示依然是世界上最受歡迎的語言。Python社區(qū)提供了豐富的第三方模塊,它們的使用方式與標(biāo)準(zhǔn)庫類似,相對簡單,容易使用和學(xué)習(xí)。它們的功能同樣豐富多樣,資料全面,覆蓋數(shù)據(jù)分析,深度學(xué)習(xí),金融分析等多個領(lǐng)域,并且已形成穩(wěn)定的使用機(jī)制。Python有著非廣泛的應(yīng)用,幾乎所有大中型互聯(lián)網(wǎng)公司都在使用Python,例如國外的Google、Youtube、Dropbox,國內(nèi)的百度、新浪、搜狐、騰訊、阿里、網(wǎng)易、淘寶、知乎、豆瓣、汽車之家、美團(tuán),等等。Python 語言很早就用來編寫網(wǎng)絡(luò)爬蟲。Google等搜索引擎公司大量地使用Python語言編寫網(wǎng)絡(luò)爬蟲。從技術(shù)層面上將,Python 提供有很多服務(wù)于編寫網(wǎng)絡(luò)爬蟲的工具,例如urllib、Selenium 和 BeautifulSoup等,還提供了一個網(wǎng)絡(luò)爬蟲框架Scrapy。

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

      隨著大數(shù)據(jù)時代的到來,網(wǎng)絡(luò)爬蟲在互聯(lián)網(wǎng)中的地位越來越重要。網(wǎng)絡(luò)爬蟲技術(shù)針對互聯(lián)網(wǎng)中的海量數(shù)據(jù),如何自動高效地獲取互聯(lián)網(wǎng)中我們感興趣的信息進(jìn)行程序設(shè)計(jì)。網(wǎng)絡(luò)爬蟲,又稱為網(wǎng)頁蜘蛛、網(wǎng)絡(luò)機(jī)器人,是一種按照一定的規(guī)則,自動請求萬維網(wǎng)網(wǎng)站并提取網(wǎng)絡(luò)數(shù)據(jù)的程序或腳本。目前的互聯(lián)網(wǎng)已經(jīng)邁入大數(shù)據(jù)時代,通過對海量的數(shù)據(jù)進(jìn)行分析,能夠產(chǎn)生極大的商業(yè)價(jià)值,因此網(wǎng)絡(luò)爬蟲技術(shù)興起。網(wǎng)絡(luò)爬蟲通過源碼獲取、數(shù)據(jù)解析、數(shù)據(jù)保存等步驟,實(shí)現(xiàn)對互聯(lián)網(wǎng)數(shù)據(jù)的提取。通過網(wǎng)絡(luò)爬蟲對數(shù)據(jù)信息進(jìn)行自動獲取采集,比如應(yīng)用于搜索引擎中對站點(diǎn)進(jìn)行爬取收錄,應(yīng)用于數(shù)據(jù)分析與挖掘中對數(shù)據(jù)進(jìn)行采集,應(yīng)用于金融分析中對金融數(shù)據(jù)進(jìn)行采集,除此之外,還可以將網(wǎng)絡(luò)爬蟲應(yīng)用于輿情監(jiān)測與分析、目標(biāo)客戶數(shù)據(jù)的收集等各個領(lǐng)域。

      網(wǎng)絡(luò)爬蟲的工作原理為:首先根據(jù)業(yè)務(wù)需求選出待爬取的目標(biāo)網(wǎng)頁,將這些網(wǎng)頁的URL地址作為種子URL,通過DNS服務(wù)器將URL地址轉(zhuǎn)換為對應(yīng)網(wǎng)站服務(wù)器的IP地址;然后將種子URL放入待抓取的URL隊(duì)列中,爬蟲程序從待抓取的URL隊(duì)列中逐個順次讀取URL地址;網(wǎng)頁下載器通過網(wǎng)站服務(wù)器對網(wǎng)頁進(jìn)行下載,獲取URL地址對應(yīng)的頁面源碼,下載到的網(wǎng)頁為網(wǎng)頁文檔形式;根據(jù)爬取規(guī)則對網(wǎng)頁文檔中的URL進(jìn)行抽取,將獲取到URL存入爬取隊(duì)列中;將獲取到的源碼進(jìn)行數(shù)據(jù)解析,獲取需要的信息;對未進(jìn)行抓取的URL繼續(xù)循環(huán)抓取,直至待抓取URL隊(duì)列為空。

      2? 拉勾網(wǎng)爬蟲程序設(shè)計(jì)思路

      本文設(shè)計(jì)需求主要針對畢業(yè)生應(yīng)聘工作,充分利用基于Python的網(wǎng)路爬蟲相關(guān)技術(shù),對所需網(wǎng)頁數(shù)據(jù)進(jìn)行獲取,以便后期分析和查找。本次網(wǎng)絡(luò)爬蟲程序設(shè)計(jì)思路包括:確定目標(biāo)網(wǎng)址、請求網(wǎng)站源碼、解析崗位信息、保存崗位信息,其中程序功能流程圖如圖1所示。

      在圖1中,首先爬取的目標(biāo)網(wǎng)頁為“https://www.lagou.com/wn/zhaopin”,其次崗位信息為公司名稱、崗位名稱,最后保存崗位信息為json格式文件。

      3? 功能模塊實(shí)現(xiàn)

      基于拉勾網(wǎng)爬蟲程序設(shè)計(jì)思路,程序功能模塊實(shí)現(xiàn)主要包括請求網(wǎng)址源碼、解析崗位信息、保存崗位信息,詳細(xì)實(shí)現(xiàn)方式如下。

      3.1? 請求網(wǎng)址源碼

      URL是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址,它包含了文件的位置以及瀏覽器處理方式等信息,URL地址由協(xié)議頭、服務(wù)器地址、文件路徑三部分組成,請求網(wǎng)址源碼首先通過瀏覽器自帶的源碼檢查工具,查看頁面request的信息和源碼,然后編寫Python腳本進(jìn)行頁面網(wǎng)址請求。其中通過瀏覽器自帶的檢查工具獲取的信息為:Request Method: GET;User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36;Request URL:https://www.lagou.com/wn/zhaopin。獲取網(wǎng)頁請求的相關(guān)信息,除了可以使用瀏覽器自帶的檢查工具,也可以使用Fiddler插件工具,進(jìn)行網(wǎng)頁發(fā)起請求的相關(guān)信息進(jìn)行捕獲。

      基于以上檢查網(wǎng)頁,獲取的請求網(wǎng)頁的相關(guān)信息,利用Python自帶的urllib庫的request方法進(jìn)行網(wǎng)頁的url請求,其中url為“https://www.lagou.com/wn/zhaopin”,urllib庫是Python內(nèi)置的HTTP請求庫,它可以看作是處理URL的組件集合。將獲取的響應(yīng)response信息進(jìn)行讀取和編碼轉(zhuǎn)換,形成html信息,將其記錄在程序根目錄下的lagou.html文件中,對獲取的源碼進(jìn)行保存,其中相關(guān)代碼如下所示:

      url = "https://www.lagou.com/wn/zhaopin"

      response = urllib.request.urlopen(url)

      html = response.read().decode('utf-8')

      with open('./lagou.html', 'w', encoding='utf-8') as f:)

      f.write(html)

      上述源碼中,調(diào)用的是urllib.request模塊中的urlopen方法,它傳入了一個百度首頁的URL,使用的協(xié)議是HTTP,這是urlopen方法最簡單的用法。urlopen方法可以接收多個參數(shù),定義格式如下:urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None),其中,url -- 表示目標(biāo)資源在網(wǎng)站中的位置;data -- 用來指明向服務(wù)器發(fā)送請求的額外信息;timeout -- 該參數(shù)用于設(shè)置超時時間,單位是秒;context -- 實(shí)現(xiàn)SSL加密傳輸,該參數(shù)很少使用。使用urlopen方法發(fā)送HTTP請求后,服務(wù)器返回的響應(yīng)內(nèi)容封裝在一個HTTPResponse類型的對象中。HTTPResponse類屬于http.client模塊,該類提供了獲取URL、狀態(tài)碼、響應(yīng)內(nèi)容等一系列方法。

      3.2? 解析崗位信息

      了解網(wǎng)頁的數(shù)據(jù)和結(jié)構(gòu)以后,我們可以借助網(wǎng)頁解析器(用于解析網(wǎng)頁的工具)從網(wǎng)頁中解析和提取出有價(jià)值的數(shù)據(jù),或者是新的URL列表。Python支持一些解析網(wǎng)頁的技術(shù),分別為正則表達(dá)式、XPath、Beautiful Soup和JSONPath。本文基于Python的拉勾網(wǎng)網(wǎng)絡(luò)爬蟲設(shè)計(jì)和實(shí)現(xiàn)使用XPath方法,XPath即為XML路徑語言,用于確定XML樹結(jié)構(gòu)中某一部分的位置。XPath技術(shù)基于XML的樹結(jié)構(gòu),能夠在樹結(jié)構(gòu)中遍歷節(jié)點(diǎn)(元素、屬性等)。XPath使用路徑表達(dá)式選取XML文檔中的節(jié)點(diǎn)或者節(jié)點(diǎn)集,這些路徑表達(dá)式代表著從一個節(jié)點(diǎn)到另一個或者一組節(jié)點(diǎn)的順序,并以“/”字符進(jìn)行分隔。XPath使用路徑表達(dá)式在文檔中進(jìn)行導(dǎo)航,它從某個節(jié)點(diǎn)開始,之后順著文檔樹結(jié)構(gòu)的節(jié)點(diǎn)進(jìn)一步查找。

      使用Google Chrome瀏覽器打開目標(biāo)網(wǎng)址網(wǎng)頁,在崗位信息上面右擊選擇“檢查”,瀏覽器底部打開一個窗口,并顯示選中元素周圍的HTML層次結(jié)構(gòu),定位之后進(jìn)行層級結(jié)果分析,編寫XPath語句。

      3.2.1? XPath解析

      利用瀏覽器的XPath插件工具,對網(wǎng)頁頁面的元素進(jìn)行XPath分析,其中定位到的崗位和公司信息的XPath為“//div[@id="jobList"]/div/div/div/div/div/a”,如圖2所示,頁面中高亮的信息為對應(yīng)的XPath可以定位的信息。

      利用如上的XPath信息進(jìn)行崗位信息定位解析,首先利用etree中的parse方法,將獲取的lagou.html文件轉(zhuǎn)化為html文檔,然后對html文檔利用xpath方法,對其進(jìn)行解析,獲取對應(yīng)的有效崗位信息,其中源碼如下所示:

      html = etree.parse('lagou.html')

      result = html.xpath('//div[@id="jobList"]/div/div/div/div/div/a')

      以上源碼中,在調(diào)用函數(shù)時,如果沒有提供解析器,那么就使用默認(rèn)的解析器,函數(shù)會返回一個ElementTree類型的對象。在ElementTree類或Elements類的API文檔中,提供了find()、findall()、iterfind()三個常用的方法,可以滿足大部分搜索和查詢需求,并且這些方法的參數(shù)都是XPath語句。

      3.2.2? BeautifulSoup解析

      除了以上使用XPath方法解析數(shù)據(jù),還可以使用BeautifulSoup對數(shù)據(jù)進(jìn)行解析,將復(fù)雜的HTML文檔轉(zhuǎn)換成樹結(jié)構(gòu)(HTML DOM),這個結(jié)構(gòu)中的每個節(jié)點(diǎn)都是一個Python對象。首先創(chuàng)建Soup對象,根據(jù)HTML或者XML文件創(chuàng)建BeautifulSoup對象;然后根據(jù)DOM樹進(jìn)行各種節(jié)點(diǎn)的搜索,只要獲得了一個節(jié)點(diǎn),就可以訪問節(jié)點(diǎn)的名稱、屬性和文本,在搜索節(jié)點(diǎn)的時候,我們也可以按照節(jié)點(diǎn)的名稱、節(jié)點(diǎn)的屬性或者節(jié)點(diǎn)的文字進(jìn)行搜索。通過分析網(wǎng)頁源碼,可以崗位信息在標(biāo)簽a下,因此,使用find_all方法獲取a標(biāo)簽下的信息,進(jìn)而獲取崗位信息,其中源碼如下所示:

      soup = BeautifulSoup(html, 'lxml')

      result = soup.find_all('a')

      如上源碼中,在創(chuàng)建BeautifulSoup對象時,明確解析器為lxml,如果沒有明確地指定解析器,那么BeautifulSoup對象會根據(jù)當(dāng)前系統(tǒng)安裝的庫自動選擇解析器,解析器的選擇順序?yàn)椋簂xml、html5lib、Python標(biāo)準(zhǔn)庫。

      3.3? 保存崗位信息

      對于這種針對小范圍用戶以及小規(guī)模的爬蟲而言,可以將爬蟲結(jié)果匯合到一個文件進(jìn)行持久化存儲即可,無需通過數(shù)據(jù)庫進(jìn)行存儲,因此本文中將獲取的崗位信息進(jìn)行保存時,是保存在json文件中,首先非常輕量,只有幾個方括號和花括號會占用額外空間。其次json能夠無限拓展數(shù)據(jù)的關(guān)系層次,就像樹狀圖,樹的根部能無止境的分叉。這就很大程度解決了csv、xlsx這種只有行列兩個維度的局限性,非常適合現(xiàn)在復(fù)雜關(guān)系的數(shù)據(jù)存儲。在Python中,json格式的文件可以用json庫或者pandas中的read_json來處理。其中保存崗位信息的源碼如下:

      items = {"position": position,"company": company}

      local_file = open("job.json", "a")

      local_file.write(json.dumps(items, ensure_ascii=False) + "\n")

      通過運(yùn)行腳本保存為job.json,其中文件如圖3所示。

      除了以上保存為文件之外,另外還可以保存到數(shù)據(jù)庫中,如關(guān)系型數(shù)據(jù)庫MySQL非關(guān)系型數(shù)據(jù)庫MongoDB、Redis等。MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫。由C++語言編寫,旨在為Web應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案。MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。Redis是一個開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。

      4? 結(jié)? 論

      本文針對畢業(yè)生查找工作信息過程中,存在崗位信息相對需求分散的問題,通過Python語言設(shè)計(jì)網(wǎng)絡(luò)爬蟲系統(tǒng),通過獲取源碼、崗位信息解析和崗位信息保存,在拉勾網(wǎng)中獲取有效的相關(guān)崗位信息,最終對崗位信息進(jìn)行保存,為進(jìn)一步使用分析作為準(zhǔn)備工作。

      參考文獻(xiàn):

      [1] 李杰秦.基于Python語言下網(wǎng)絡(luò)爬蟲的技術(shù)特點(diǎn)及應(yīng)用設(shè)計(jì) [J].數(shù)字通信世界,2020(1):209-210.

      [2] 張宇超.基于標(biāo)簽路徑和關(guān)鍵詞特征的Web新聞抽取方法研究與實(shí)現(xiàn) [D].西安:西安電子科技大學(xué),2021.

      [3] 孫握瑜.基于Python的新浪微博爬蟲程序設(shè)計(jì)與實(shí)現(xiàn) [J].科技資訊,2022,20(12):34-37.

      [4] 裴麗麗.基于Python對豆瓣電影數(shù)據(jù)爬蟲的設(shè)計(jì)與實(shí)現(xiàn) [J].電子技術(shù)與軟件工程,2019(13):176-177.

      [5] 李傳科.基于Python的網(wǎng)頁數(shù)據(jù)爬蟲設(shè)計(jì)分析 [J].信息與電腦:理論版,2020,32(24):130-132.

      [6] 簡悅,汪心瀛,楊明昕.基于Python的豆瓣網(wǎng)站數(shù)據(jù)爬取與分析 [J].電腦知識與技術(shù),2020,16(32):51-53.

      [7] 李鑫欣,關(guān)菁華.基于Python的豆瓣讀書網(wǎng)站用戶信息采集 [J].電腦知識與技術(shù),2019,15(8):4-6.

      作者簡介:馮曉磊(1988—),女,漢族,河南汝州人,中級工程師,碩士研究生,研究方向:大數(shù)據(jù)與人工智能。

      收稿日期:2022-10-29

      猜你喜歡
      網(wǎng)絡(luò)爬蟲
      煉鐵廠鐵量網(wǎng)頁數(shù)據(jù)獲取系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
      基于社會網(wǎng)絡(luò)分析的權(quán)威網(wǎng)頁挖掘研究
      主題搜索引擎中網(wǎng)絡(luò)爬蟲的實(shí)現(xiàn)研究
      淺析如何應(yīng)對網(wǎng)絡(luò)爬蟲流量
      中國市場(2016年23期)2016-07-05 04:35:08
      網(wǎng)絡(luò)爬蟲針對“反爬”網(wǎng)站的爬取策略研究
      锦屏县| 青州市| 翁牛特旗| 泰州市| 从化市| 津市市| 波密县| 高淳县| 仪陇县| 南和县| 孝感市| 呼图壁县| 忻城县| 隆子县| 梅河口市| 兴国县| 盐源县| 甘肃省| 鲜城| 驻马店市| 河北省| 长海县| 金山区| 绵竹市| 宁城县| 即墨市| 定日县| 稷山县| 郁南县| 河曲县| 佛坪县| 兴宁市| 萨嘎县| 龙里县| 喜德县| 车险| 蓝山县| 安化县| 兖州市| 洪雅县| 鄂温|