時存儲形式為HTML代碼。爬蟲對已 經(jīng)爬過的URL和沒有爬的URL做區(qū)分,防止重復(fù)爬取。爬蟲會有初始的種子URL,但是這些 URL對于爬蟲是遠遠不夠的。爬蟲在爬頁面的時候,需要不斷發(fā)現(xiàn)新的鏈接,以實現(xiàn)自動化 爬行。
[0034] 步驟102、在存儲下來的HTML代碼基礎(chǔ)上進行廣告內(nèi)容的抽取,按廣告的內(nèi)容分 為如下幾個部分:廣告網(wǎng)址,廣告標題,廣告標簽,創(chuàng)建時間,廣告內(nèi)容,工作類型,要求經(jīng) 驗,工資范圍,工作地點,然后將其存儲在招聘信息數(shù)據(jù)表中。
[0035] 廣告內(nèi)容的抽取具體包括,從數(shù)據(jù)庫中獲取HTML代碼信息并封裝成自定義的頁 面格式,根據(jù)不同的頁面查找相應(yīng)的模板進行抽取,對抽取成功的結(jié)果進行輸出。
[0036] 在此需要步驟101中的爬蟲框架,Jsoup,Mybatis開源工具。抽取框架由四個 組件(PageDownloader、PageProcessor、PageErrorOutPut、Pipeline)構(gòu)成,主要是將這 些組件結(jié)合并完成增量抽取的任務(wù):PageDownloader主要完成從數(shù)據(jù)源(數(shù)據(jù)庫、文件 等)中獲取頁面信息并封裝成RawPage和Page(此時Page已經(jīng)被封裝在RawPage中); PageProcesser根據(jù)不同的頁面找到相應(yīng)的Model進行抽?。赡艽嬖诙鄠€模板); Pipeline接受PageProcesser抽取成功并封裝在Resultltems的結(jié)果進行輸出,輸出的位 置由用戶決定;PageErrorOutPut接收PageProcesser抽取失敗和Pipeline存儲失敗的頁 面,實現(xiàn)錯誤頁面輸出。
[0037] 采用的兩種開源工具,其中MyBatis是支持普通SQL查詢,存儲過程和高級映射的 優(yōu)秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢 索。Xsoup是Jsoup基于開發(fā)的HTML抽取器,提供了XPath支持。相比另一個常用的基于 XPath的HTML抽取器HtmlCleaner,Xsoup有較大的性能優(yōu)勢,解析時間和抽取時間都只有 HtmlCleaner的一半。同時Xsoup提供全面的XPath解析錯誤提示。
[0038] 更具體地,在步驟102的實施中,還包括
[0039] 步驟102. 1、完成數(shù)據(jù)庫,Mybatis,Spring等配置文件;
[0040] 步驟 102. 2、完成PageDonwLoader接口實現(xiàn)類;
[0041] 步驟102. 3、實現(xiàn)對應(yīng)的模板Xxx_Model;-般對應(yīng)的model由三個部分組成:
[0042] 1.ExtractBy注解和相對應(yīng)的屬性,ExtractBy注解主要作用于字段,它表示"使 用這個抽取規(guī)則,將抽取到的結(jié)果保存到這個字段中"例如:
[0043] OExtractBy("http://div[@id=,readme']/text()'')
[0044]privateStringreadme;
[0045] 2.實現(xiàn)AfterExtractor接口中的方法afterProcessO;有的時候,注解模式無法 滿足所有需求,我們可能還需要寫代碼完成一些事情,這個時候就要用到AfterExtractor 接口了。例如:
[0046]publicinterfaceAfterExtractor{
[0047]publicvoidafterProcess(Pagepage);
[0048] }
[0049]afterProcess方法會在抽取結(jié)束,字段都初始化完畢之后被調(diào)用,可以處理一些 特殊的邏輯
[0050]3.實現(xiàn)ValidateExtractor接口中的方法validate(),有的時候,我們需要對抽 取的字段做相應(yīng)的驗證,比如字段非空,日期類型檢查,數(shù)值型數(shù)據(jù)監(jiān)測等,這時候可以用 到ValidateExtractor接口。
[0051]publicinterfaceValidateExtractor{
[0052] publicvoidvalidate(Pagepage);
[0053] }
[0054]Validate方法會在抽取結(jié)束,字段都初始化完畢之后被調(diào)用,可以處理一些驗證。
[0055] 具體model實現(xiàn)為:
[0056]
[0057]步驟102. 4、實現(xiàn)抽取結(jié)果與數(shù)據(jù)庫映射接口Xxx_Da〇 ; [00581
[0059]步驟 102. 5、完成接口Pipeline的實現(xiàn)類Xxx_Pipeline;
[0062]步驟 102. 6、完成主程序Xxx_Extractor。
[0063]
[0065] 步驟103、采用軟件名稱與廣告標簽、軟件標簽和廣告標簽、軟件名稱和廣告標題、 軟件標簽和廣告標題四組不同數(shù)據(jù)進行廣告和軟件的匹配;
[0066] 具體為如下幾步:
[0067] 步驟103. 1、采用通用Web爬蟲技術(shù)從互聯(lián)網(wǎng)的主要項目托管社區(qū)中采集軟件的 項目數(shù)據(jù),獲取軟件名稱;
[0068] 步驟103. 2、采用開源全文檢索工具Lucene為采集到的廣告文檔的文檔標題、文 檔內(nèi)容和軟件名稱建立文件索引;用軟件名稱與廣告標簽進行匹配;若所述文檔具有與所 述軟件名稱相同的標簽,則為所述廣告文檔與所述開源軟件建立關(guān)聯(lián),并賦予權(quán)值 Wl,表示 以軟件名稱和廣告標簽為度量時,所述廣告文檔針對所述開源軟件的關(guān)聯(lián)程度。(在實際的 計算中,?。?= 1)。
[0069] 步驟103. 3、用軟件名稱在文檔標題中進行檢索,檢索的過程使用開源的Lucene 全文檢索工具實現(xiàn),具體實施為:以軟件名稱為關(guān)鍵詞,從步驟103. 2中建立的文件索引中 搜索廣告文檔的標題,若文檔標題中含有軟件名稱,則為該文檔與軟件建立關(guān)聯(lián),并將這次 關(guān)聯(lián)賦予權(quán)值w2,表示以軟件名稱和廣告標題為度量時,所述廣告文檔針對所述開源軟件 的關(guān)聯(lián)程度。在實際的計算中,取w2= 0.8。
[0070] 步驟103. 4、對軟件標簽統(tǒng)計包含在廣告標題中的標簽個數(shù)X,計算權(quán)值《3 = 0. 5*log2(x2+l),該權(quán)值表示以軟件標簽在文檔標題中的出現(xiàn)次數(shù)作為該軟件與廣告文檔 關(guān)聯(lián)程度的度量,通過權(quán)值的計算判斷關(guān)聯(lián)結(jié)果的可信度,其表示以軟件標簽在廣告標題 中的出現(xiàn)次數(shù)作為該軟件與廣告文檔關(guān)聯(lián)程度的度量,通過權(quán)值的計算判斷關(guān)聯(lián)結(jié)果的可 信度。
[0071] 步驟103. 5、在所有已建立的關(guān)聯(lián)中,對關(guān)聯(lián)的軟件標簽與廣告標簽進行匹配,統(tǒng) 計在兩者中都出現(xiàn)的標簽個數(shù)y,計算權(quán)值%= 0. 6*log2(y2+l),其表示以軟件標簽和廣告 標簽中相同的標簽個數(shù)作為度量,通過權(quán)值的計算判斷關(guān)聯(lián)結(jié)果的可信度。
[0072] 步驟103. 6、步驟103. 2到步驟103. 5對軟件和廣告的4種不同數(shù)據(jù)進行匹配,并 為每一步的關(guān)聯(lián)結(jié)果賦予了相應(yīng)的權(quán)值,這4步匹配結(jié)束后,計算最終的權(quán)值w=Wi+Wjj+C Wl+W2)*(W3+W4),把權(quán)值超過指標的匹配結(jié)果看作是匹配成功,并將匹配結(jié)果存儲在數(shù)據(jù)庫 中;
[0073] 步驟104、從開發(fā)者經(jīng)驗、職位地點、軟件類型反映軟件市場需求數(shù)目和薪資影響, 并基于開發(fā)者經(jīng)驗、職位地點、軟件類型三個不同因素向用戶推薦軟件;
[0074] 進一步地,步驟104進一步包括:
[0075] 步驟104. 1、根據(jù)用戶需求確定需要進行進一步分類的已經(jīng)提取廣告屬性字段,對 數(shù)據(jù)庫存放的匹配結(jié)果和抽取結(jié)果,進行屬性分類、軟件分類和相應(yīng)的sql操作,將統(tǒng)計信 息以可視化方式推薦給用戶;
[0076] 進一步地,步驟104. 1可進一步包括:得出市場對不同經(jīng)驗者的需求量和工資、不 同地區(qū)的整體工資和需求量、以及同一類軟件在同一城市的需求、工資軟件職位數(shù)目需求 信息。
[0077] 例如:每個廣告中都有對開發(fā)者經(jīng)驗的要求,經(jīng)驗要求以標簽形式存儲在每一條 廣告的屬性中,分為"經(jīng)驗1-3年" "經(jīng)驗3-5年"等標簽內(nèi)容,按照標簽內(nèi)容不同進行分類 處理??梢苑譃?類,即應(yīng)屆、1-3, 3-5, 5-10,10年以上;
[0078] 然后根據(jù)分類好后的標簽進行數(shù)量和平均薪資計算;
[0079]scoresΣnumber
[0080]score2=avgΣsalary
[0081] 具體實現(xiàn)可以采用sql語句,例如以下是平均薪資的計算;
[0082]
[0083] 當用戶想要查看不同經(jīng)驗的市場需求情況時候,如果選擇參考需求量的時候,顯 示按照sc〇rei的從大到小的順序返回給用戶;如果選擇參考薪資水平,則顯示按照score2 的從大到小的順序返回給用戶;
[0084] 基于職位地點的推薦,不同地區(qū)的整體工資差異和需求量有區(qū)別,同樣職位地區(qū) 也是以標簽形式存儲在廣告屬性中,我們參考前一統(tǒng)計方法進行同樣的處理。
[0085] 用戶在查看該部分結(jié)果的時候,需要選擇城市地區(qū),然后再選擇查看需求量還是 平均薪資水平,顯示按照scoreJPscore2的從大到小的順序返回給用戶。
[0086] 比如,基于城市的薪資統(tǒng)計的sql操作:
[0087]
[0088] 進一步地,步驟104. 1還可以包括:在匹配廣告的基礎(chǔ)上建立同類軟件關(guān)聯(lián),推薦 給用戶,具體的:當若干個軟件都與同一廣告匹配時,所述若干個軟件之間的值為1,當所 述若干個軟件都與另一相同廣告匹配時,累計為2,如此類推,當該值超過了設(shè)定的闕值,則 判定兩種軟件為同一類軟件,當用戶