馮 成
(貴州電子信息職業技術學院,貴州 凱里 556000)
隨著大數據時代的來臨,信息的產生正呈指數形式增長,而傳統崗位信息的獲取方式過于單一,很難滿足當前高校畢業生的求職需求?;ヂ摼W中發布的崗位信息由多種元素組成,具有變動性大、時效性強、分布范圍廣等特點,雖然是學生獲取就業崗位信息的有效渠道,但在高校依然存在就業信息不通暢的問題。為了提高就業信息使用率,文章利用分布式技術爬取招聘網站的相關招聘信息,通過算法抽取有用的數據信息,并存儲到存儲系統當中,通過信息分享平臺將數據分享給全校學生使用[1-3]。
文章所需爬取的崗位信息數據來源于“前程無憂”網站,在項目的開發過程中使用了Scrapy框架完成指定數據的爬取,并將爬取到的數據保存到MySQL數據庫當中。具體的開發流程如下所示。
第一步:在Windows的cmd命令提示符界面中進入代碼存放目錄,并在該目錄下創建Scrapy工程名和模板名稱。第二步:settings.py設置header代理頭和Mysql連接參數的設置以及根據項目的需要設置相關反爬蟲措施。第三步:items.py主要設置了需要爬取的字段內容,使用scrapy.Field()方法完成相關爬取字段的設定。第四步:piplines.py主要負責利用Python連接MySQL數據庫,并自定義了MySQL數據插入方法insert_data(),用于將爬取到的內容放入到MySQL數據庫當中。第五步:自定義爬取類Job,Job是爬蟲的核心內容,主要負責頁面的解析和數據爬取。
2.2.1 界面的分析
要爬取指定內容,需要到相應的網站訪問填寫相應的搜索關鍵詞,文章當中的搜索關鍵詞分別為地點:”全國”,全文:”Java”,其產生的URL如下:”https://search.51job.com/list/000000,000000,0000,00,9,99,Java,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=”。
在URL中,Java表示搜索的崗位名稱,其中,“..../list /000000 .....”中的000000表示全國,workyear表示工作年限,companysize表示公司的規模,providerSalary表示薪資水平。
2.2.2 詳細信息的獲取
信息的獲取是本次應用的核心內容,文章使用了xpath庫,定位獲取“公司名稱”“工作名稱”“公司信息”“基本要求”“工作地點”等相關信息。具體的步驟如下。(1)設置編寫的start_url的鏈接地址,用于獲取招聘信息網頁。(2)在parse方法中,主要處理兩大部分內容:
第一部分為詳情頁的request,其主要是通過xpath定位到招聘信息列表,并使用for循環函數遍歷該列表,獲取招聘名稱和詳情頁鏈接,之后將詳情頁鏈接發送給回調函數“detail_parse”處理。獲取詳情頁的關鍵代碼如下所示。
result_list=response.xpath("http://div[@class=′dw_table′]/div")
for list in result_list:
#獲取名稱
name=list.xpath("./p/span/a/text()").get()
//獲取鏈接地址
url=list.xpath("./p/span/a/@href").get()
第二部分主要工作是css選擇器來提取數據以及判斷是否存在下一頁,如果存在下一頁則將數據回調給parse處理。獲取下一頁的主要代碼如下。
next_url = response.css(
′#resultList>div.dw_page>....>li:last-child>a::attr(href)′).extract_first());
調用parse_detaill方法,在該方法中使用response.xpath()方法獲取要指定的爬取內容,如崗位名稱、公司名稱、薪水、崗位信息、福利待遇、公司規模、公司地址等內容,并將其發送給Items。詳情頁主要爬取代碼如下。
jobname=list.xpath("./div[@class=′cn′]/h1/text()").get()
……
salary=list.xpath("./div[@class=′cn′]/strong/text()").get()
2.2.3 反爬蟲措施
為了保護網站的資源和提高數據的安全性,限制爬蟲措施已經廣泛被使用在各大網站中,文章當中采用了反爬蟲措施如下。(1)IP代理:通過IP動態代理的方式,避免網站偵測到真實的IP地址,防止了網站禁止本機IP的訪問。(3)User-agent代理池:是一種有效的代理方式,能夠有效地防止網站的偵測識別,將user-agent寫入到settings文件中。
2.2.4 數據的存儲
數據存儲將極大地提高數據價值,文章將爬取數據存放到MySQL數據庫當中,數據庫的具體操作步驟如下。
(1)分別在settings和ITEM_PIPELINES文件中完成數據庫的配置,具體的數據庫連接配置如表1所示。

表1 數據庫連接參數
(2)數據爬取完成之后,發送給pipeline的處理,主要完成的是數據庫的連接和數據的插入,其中,在數據__init__(self, )時,完成指定數據庫的連接,并使用process_item方法調用insert()方法完成數據的保存至數據庫,存儲部分內容如圖1所示。insert插入數據的關鍵代碼如下。
sql = "insert into java(jobname,.....,company_info) VALUES(%s,....,%s);"
params = (item[′jobname′],.....,item[′company_info′])
self.cursor.execute(sql, params)

圖1 爬取部分數據展示
文章首先對分布式爬蟲技術進行了介紹;其次,闡述了整個項目的構建過程;最后,介紹了項目的技術實現,實現數據爬取工作,并將數據存儲到MySQL數據庫當中,但是如何對數據進行處理分析、采用何種算法完成就業信息的預測,依舊是后期需要研究的重點內容。