魯豐玲
摘? 要:隨著互聯(lián)網發(fā)布的各種數據在急劇增長,人們正常進入網站精確獲取信息的速度較慢而且信息量較小,按照一定的規(guī)則編寫的計算機指令——網絡爬蟲應運而生,它可以在較短的時間內從網絡上自動抓取大量數據信息。該文研究的是基于Scrapy框架的一種招聘信息主題網絡爬蟲的設計與實現(xiàn)。主題網絡爬蟲只搜索與主題信息有關的資源數據,用來服務于高校畢業(yè)生群體,作為就業(yè)前收集招聘信息的輔助手段。
關鍵詞:Python? 網絡爬蟲? 主題網絡爬蟲? 網頁信息抓取
中圖分類號:TP393.092 ? ?文獻標識碼:A 文章編號:1672-3791(2019)07(b)-0007-04
Abstract: With the rapid growth of various data released by the Internet, people normally enter the website to obtain accurately information is Comparatively slower and the amount of information is less.The computer instructions written according to certain rules——web crawlers came into being, it can be shorter Automatically grab large amounts of data from the network during the time. This paper studies the design and implementation of a recruitment information topic web crawler based on the Scrapy framework. The theme web crawler only searches for resource data related to the topic information, which is used to serve the college graduates as an auxiliary means of collecting recruitment information before employment.
Key Words: Python; Web crawler; Topic web crawler; Web page crawling
隨著網絡技術與新媒體技術的快速發(fā)展,互聯(lián)網產生的數據也在快速增長,人們也越來越注重數據的意義,重視研究數據挖掘的價值。傳統(tǒng)的人工數據采集方法,因樣本小、誤差大等因素,已經無法滿足高質量分析的需求,在信息迅速膨脹的時代,網絡爬蟲就備受人們追捧,成為當下信息采集數據挖掘的主要方式之一。一些學者提出:互聯(lián)網上60%的流量都是由網絡爬蟲帶來的[1]。
1? 網絡爬蟲簡介
1.1 網絡爬蟲
網絡爬蟲是一種用于抓取Web信息的計算機程序或指令腳本[2],它遵循某些特定的規(guī)則,可以從網絡上自動獲取所需要的信息,可以理解為網絡上的“機器人”[3],它有多個名字,如Web信息收集器、Ant、自動索引、蠕蟲等,有時也被稱為網頁蜘蛛。網絡中的每個網頁都有與其對應的唯一URL鏈接地址,網絡爬蟲從指定的某個URL出發(fā),開始向目標網站發(fā)出請求,服務器正常響應后訪問相關聯(lián)的所有頁面的URL,從中提取該頁面有價值的數據,這些數據可以是字符串、HTML等類型,并且把符合需求的URL添加到請求隊列中,從而構成新的URL請求列表,接著進行下一輪的訪問提取工作,直到爬蟲搜索完整個URL隊列頁面,或者滿足結束條件時結束訪問,爬蟲工作的基本流程如圖1所示。
1.2 主題網絡爬蟲
主題網絡爬蟲是根據指定的主題,只搜索抓取與主題相關的網站頁面,因而大大提高爬取速度,獲取的網頁有針對性,保存數量減少,可以節(jié)省大量的網絡資源,完全可以滿足特定人員對某種特定域信息的需求[4]。主題網絡爬蟲之所以能實現(xiàn)對特定信息的獲取,在于它對網頁目標主題相關度的計算及篩選[5],這是主題爬蟲的優(yōu)勢所在。網頁主題相關度的計算方法可以按照計算分析具體內容的不同分為3類:基于網頁內容的算法、基于鏈接結構的算法、基于綜合價值的算法。
2? Python語言簡介
2.1 Python語言
Python是解釋型、面向對象的計算機開源編程語言,語法規(guī)則簡單,有“功能齊全”的標準庫和強大豐富的第三方庫支持,其中如Requests庫、Urllib庫、Scrapy庫等均可以用來編寫爬蟲[6],其中Scrapy庫的使用最普遍。Python具有極好的可擴展性,可以實現(xiàn)動態(tài)編程。它可以與用其他編程語言(如C/C++和Java)生成的各種模塊很容易地接口,擁有強大的HTML語言解析器和網絡支持庫,運用Requests網絡支持庫通過少量代碼的編寫就可以下載網頁,運用Beautiful Soup網頁解析庫可以輕松從HTML或XML網頁中解析各個標簽,并快速提取頁面內容。在實際應用中,利用Python語言構建的程序原型,甚至包括原型的用戶界面,如果有一些要實現(xiàn)特別的功能需求,還可以改用另外的計算機語言去編寫,因此,它常被稱為膠水語言[7]。Python語言很容易學習使用,可移植的性能使它對開發(fā)平臺沒有很高的要求。
2.2 Scrapy框架
Scrapy框架是Python開發(fā)的、用來爬取網頁信息的框架,它是基于Python爬蟲開發(fā)中使用最廣泛的框架,可以應用于數據挖掘、數據監(jiān)測以及信息處理等方面。Scrapy框架主要由以下組件構成:引擎(Scrapy Engine)、調度器(Scheduler)、爬蟲(Spiders)[8]、下載器(Downloader)、項目管道(Item Pipeline)、Spider中間件(Spider Middlewares)、下載器中間件(Downloader Middlewares)[8]。
2.3 Scrapy框架的工作流程
在Scrapy框架中引擎處于框架的中心位置,控制各組件間的數據流向,它爬取的工作流程簡要如下。
(1)確定要抓取的目標網站之后,由爬蟲發(fā)出要處理的第一個URL信息請求,請求被發(fā)送到引擎。
(2)引擎接收到請求信號,通知調度器把與爬取主題相關的頁面請求送入隊列。
(3)調度器收到來自引擎的請求信號,按照某種方式將請求信息整理后放入URL隊列,待到有需要時再重新交還給引擎,與此同時,調度器將下一個待爬取的URL傳送給引擎,引擎將URL通過下載中間件轉發(fā)給下載器。
(4)下載器獲得Requests請求后根據指令從頁面上獲取數據,抓取的響應交還給引擎。
(5)引擎從下載器中接收到響應信號,通過Spider中間件轉交給爬蟲去處理。
(6)爬蟲分析獲取的響應信息,把item字段所需要的數據信息提取出來,交給項目管道去下載,并返回爬取到的項目內容及需跟進新的URL請求給引擎。
(7)引擎通知項目管道處理獲取到的數據,項目管道接收到爬蟲傳遞的數據,并對這些數據進行清理、驗證及存取等處理。
(8)引擎通知調度器跟進新的URL,調度器獲取到URL,重復以上操作,直至調度器里URL隊列為空時,結束爬蟲運行[9]。
3? 基于Python的招聘信息主題爬蟲的分析、設計與實現(xiàn)
3.1 招聘信息主題爬蟲的分析
該文的招聘信息主題爬蟲劃為分類模塊、爬蟲模塊、提取模塊3個部分。其中分類模塊用來分析提取URL信息,該模塊側重于參照網頁參數判斷招聘主題的相關性,使用正則表達式和值來判斷招聘主題的相關性,評估分析網頁URL的信息提取價值,并且給出與之相應的搜索次序[10];爬蟲模塊功能在于實施招聘主題信息網頁的抓取,在滿足爬取規(guī)則的范圍內抓取符合招聘主題信息的網頁數據,將抓取的網頁數據存入到數據庫中并為它們建立索引,根據用戶輸入的關鍵字,從數據庫中查詢符合用戶需求的數據頁面并把它們取出;提取模塊指出抓取頁面的順序,提取招聘主題網頁的內容,下載頁面源代碼,該模塊中主要涉及主體內容和網頁源代碼的提取。
3.2 招聘信息主題爬蟲的設計
3.2.1 創(chuàng)建Scrapy新項目
編寫網絡爬蟲,第一步建立一個Scrapy項目文件,在CMD窗口中運行更改目錄的命令,把當前位置切換到將要用于保存爬蟲代碼的文件夾中,運行命令“scrapy startproject 自定義爬蟲名稱”,文件夾中會自動創(chuàng)建爬蟲的項目框架。該項目文件夾里的內容包括:項目配置文件、python模塊、item文件、pipelines管道文件、設置文件和爬蟲目錄文件夾等幾個部分。
3.2.2 定義Item容器
為已爬取的網絡數據定義用于保存的容器,與python字典的使用方法相似,而且定義Item容器為消除由于拼寫錯誤帶來的麻煩,增加了額外保護機制。根據實際需要在item.py文件中對提取的數據定義相應的字段,比如網站的標題、網站的描述、網站的鏈接等。
3.2.3 編寫爬蟲
爬蟲程序用于爬取網站信息,它的實現(xiàn)內容包含有初始下載的鏈接地址即URL列表、后續(xù)跟進網頁的URL鏈接、判斷網頁內容是否與主題相關、采用何種算法、提取數據生成item的方法,具體程序內容是用戶自己編寫的類。
編寫爬蟲時首先要觀察網頁明確需求,該文選用招聘信息主題網站前程無憂51job網站的職位搜索列表頁面,開發(fā)前先進行數據分析:分析招聘主題信息爬蟲要爬取的數據信息包括職位名、公司名、工作地點、薪資、發(fā)布時間等;觀察51job頁面的源代碼和頁面結構。通過觀察51job頁面的源代碼和頁面結構,發(fā)現(xiàn)頁面主題部分有用的信息數據都由div區(qū)分,因此提取數據時使用XPath方法解析相對方便。
用戶在創(chuàng)建自定義爬蟲時,必須繼承scrapy.Spider類的屬性與方法,它還應該定義3個屬性:name屬性(不同的spider必須設置不同的名稱以區(qū)別其他爬蟲)、start_urls屬性(包括爬蟲開始時的URL列表)和parse()回調函數。其中回調函數,在下載器返回響應對象Response時就會被調用,當下載完初始URL后,生成的響應對象Response被作為參數發(fā)送回parse()函數。此屬性用來解析返回的數據、提取數據、對需要進一步訪問提取數據的URL鏈接生成的請求對象Request。在這里選用的是,在51job網站進行職位搜索“平面設計師”及工作地點定位于“河南”地區(qū)的列表頁面URL作為起始start_urls。
3.3 招聘信息主題爬蟲的運行
3.3.1 運行爬蟲爬取數據
通過“cd 自定義爬蟲名稱”命令進入到爬蟲項目文件夾根目錄中,運行啟動爬蟲的命令“scrapy crawl 自定義爬蟲名稱”,Scrapy為爬蟲的start_urls屬性中的每個URL鏈接創(chuàng)建對應的響應對象Response,為創(chuàng)建的響應對象指定回調函數prase(),接著調度響應對象、執(zhí)行下載器程序,執(zhí)行完成后生成響應對象,最后把響應對象反饋到Spider類。在主題爬蟲的運行過程中,首先收集與主題相關的頁面并將其稱為URL種子集,然后從種子頁面開始,將與主題相關度大的URL鏈接放入等待隊列,減少無關網頁的下載帶來的消耗,確定每個鏈接的優(yōu)先級。運行過程中的界面如圖2所示。
3.3.2 存儲內容
由于該文選用的是前程無憂51job網站,將爬取篩選后的數據存放到item中,運用Scrapy框架里包含的Feed exports命令可以很方便地導出文件,保存爬取到的信息。但是該文提取招聘信息的目的是為了方便服務學生,因而最終希望將爬取的信息數據導出到Excel文件中。Python豐富強大的庫中有專門處理Excel文件的庫,如xlrd、xlwt、xlutils、openpyxl等庫。其中xlrd庫用來讀取Excel格式文件;xlwt庫是針對Excel格式文件的創(chuàng)建、格式的設置、數據的寫入、文件的保存等操作進行處理;xlutils庫對Excel格式的文件既可以讀取,又可以寫入、修改。這里選用的是openpyxl庫,這是一個比較簡單的第三庫,它可以用來處理xlsx格式的Excel文件,只需要先實例化一個Workbook對象,然后用save()方法保存即可,運行結果如圖3所示。
3.3.3 結果分析
從以上運行的結果可以看出,Excel文件中爬取的內容都是近期發(fā)布的、想要搜索的“河南區(qū)域”范圍內的“平面設計師”招聘信息,搜集的數據基本符合所要查詢職位的相關信息,但也出現(xiàn)了個別數據不確切的情況,基本可以滿足學生就業(yè)查詢的需求,整體來看影響不大。在今后的實際運行過程中可以更換起始頁面的URL信息,來爬取其他就業(yè)崗位的相關招聘信息,以服務更多不同專業(yè)需求的學生。因此,招聘信息主題爬蟲技術可以作為服務于畢業(yè)生的技術手段,幫助其以快速獲取相關專業(yè)的各類招聘信息。
4? 結語
網絡信息資源充盈的今天,網絡信息的獲取工作十分重要,該文主要從網絡爬蟲、Python語言與Scrapy框架幾個方面進行闡述,簡單介紹了招聘信息主題網絡爬蟲的工作流程、開發(fā)與實現(xiàn),希望所抓取的數據信息能夠服務于院校畢業(yè)生的就業(yè)工作。與一般的爬蟲技術相比,主題網絡爬蟲有明顯的精確性特征,可以精準地搜索與主題相關的網頁信息,增強了網絡搜索的實效性。但是,由于主題爬蟲要根據主題信息進行相關度數據分析,會產生諸多等待時間,因此主題網絡爬蟲的搜索技術仍有很大的改善空間,比如采用多進程、多線程等主題爬蟲來提高爬取信息的效率。在今后的研究工作中,繼續(xù)改進招聘信息主題爬蟲的設計,完善有關功能,提升爬取數據的效率,經常關注招聘信息網站的更新,以期更好地為學生就業(yè)工作提供更多的幫助。
參考文獻
[1] 韓貝,馬明棟,王得玉.基于Scrapy框架的爬蟲和反爬蟲研究[J].計算機技術與發(fā)展,2019(2):139-142.
[2] 洪芳.基于Selenium2的Web UI自動化測試框架的設計與實現(xiàn)[D].西南交通大學,2017.
[3] 劉杰,葛曉玢,聞順杰.基于Python的網絡爬蟲系統(tǒng)的設計與實現(xiàn)[J].信息與電腦:理論版,2019(12):92-93,96.
[4] 孫立偉,何國輝,吳禮發(fā).網絡爬蟲技術的研究[J].電腦知識與技術,2010(15):4112-4115.
[5] 薛麗敏,吳琦,李駿.面向專用信息獲取的用戶定制主題網絡爬蟲技術研究[J].信息網絡安全,2017(2):12-21.
[6] 魏冬梅,何忠秀,唐建梅.基于Python的Web信息獲取方法研究[J].軟件導刊,2018,17(1):41-43.
[7] 郭麗蓉.基于Python的網絡爬蟲程序設計[J].電子技術與軟件工程,2017(23):248-249.
[8] 劉宇,鄭成煥.基于Scrapy的深層網絡爬蟲研究[J].軟件,2017,38(7):111-114.
[9] Qingzhao Tan,Prasenjit Mitra.Clustering-based incremental web crawling[J].ACM Transactionson Information Systems(TOIS),2010,28(4):85-89.
[10] 方星星,魯磊紀,徐洋.網絡輿情監(jiān)控系統(tǒng)中主題網絡爬蟲的研究與實現(xiàn)[J].艦船電子工程,2014,34(9):104-107.