周少波

摘要:隨著大數據技術的迅速發展以及智能手機的普及,其應用已滲入到人類社會的各個領域并發揮越來越重要的作用。本系統基于SSM框架的數據采集系統,前臺采用的是SpringBoot框架和JSP技術進行開發,后臺采用HtmlUnit框架進行爬蟲業務的開發,采用MySQL 數據庫及MongoDB進行數據的存儲和支撐,開發模式采用的是B/S模式的Web應用程序。實現了數據抓取配置,數據提取配置,數據抓取,數據excel表格下載,關鍵字管理,登錄,修改密碼,退出系統等功能。在設計上具有友好的交互界面,系統用戶可以在管理界面上對后臺進行爬蟲配置。系統用戶在配置成功后,開啟爬蟲,即可不再受任何時間限制地進行數據抓取了。
關鍵詞:爬蟲;SpringBoot;數據抓取;MongoDB;B/S
中圖分類號:TP311? ? 文獻標識碼:A? ? ? ?文章編號:1009-3044(2018)34-0045-03
1引言
隨著大數據技術的發展與其日益完善,很多傳統企業的運作都開始加入了大數據技術,使企業能在發展市場上走在其他同行企業的前面。但是,要使用大數據技術,首先要有足量大的數據作為支撐才有意義,因而,數據采集就必然是其最基礎,最重要的部分。因此,生產一個高效穩定的數據采集系統迫在眉睫。目前,爬蟲技術采集數據成為數據采集方式的有力補充和發展。爬蟲技術采集數據不僅減少了對數據采集的人力、物力的投入,并且突破了時間與空間的限制,不僅節省了資源,而且提高了數據采集的效率和準確度??傊髷祿夹g在各行業的普及,爬蟲數據采集技術必將得到發展,其關注度一定會逐漸增加。為生產一個高效穩定的數據抓取系統,作者經過研究幾種不同的爬蟲制作方案,經充分的考慮,最后給出了一個較為理想的爬蟲制作方案,并結合當前部署和維護方便及其擴展性較好的B/S架構來開發一個高效穩定的數據抓取系統?;贐/S模式的數據采集系統完美地克服了人工采集方式所帶來的人力、物力以及時間上的浪費,同時也保證了數據的產出速率和準確率。
2? 需求分析
本系統需要技術人員才能進行操作,且系統定位為企業內部使用系統,所以并沒有需要對用戶類型進行過于嚴格的分類管理,因此用戶類型僅需有系統管理員和數據采集員兩類。
系統管理員需求:系統管理員可管理數據采集員賬戶、修改密碼、登錄系統、管理爬蟲規則、查看爬蟲數據、下載爬蟲數據、啟動/停止爬蟲、解析數據、開啟定時器、關鍵字管理、退出系統等功能。
1)登錄:因為這個系統目前設定為企業內部系統,而非商業性系統,因此無須開放注冊功能。系統管理員的賬戶密碼在系統部署時在數據庫進行預設。所有用戶在登錄時,系統校驗用戶名和密碼,正確則放行,錯誤則彈出提示信息。
2)修改密碼:可以修改個人密碼和數據采集員密碼。
3)管理數據采集員賬戶:系統管理員可以對數據采集員賬戶進行添加、刪除、修改。
4)管理爬蟲規則:管理員可以像數據采集員一樣,對爬蟲規則進行添加、和配置刪除。
5)查看爬蟲數據:查看當前爬蟲產生的原數據和提取數據。
6)下載爬蟲數據:爬蟲數據成功提取后,可以導出為excel文檔。
7)啟動/關閉爬蟲:手動開啟/關閉指定的爬蟲規則,自動功能開啟后禁用。
8)解析數據:立即提取數據
9)開啟定時器:開啟后,使用預設的定時時間,定時對爬蟲規則進行定時的進行數據抓取和數據提取(一般網站都是白天的訪問量最高,晚上最低,所以可以預設時間為晚上抓取數據,白天提取數據。這樣可以充分利用爬蟲系統的網絡帶寬)。
10)關鍵字管理:本數據采集系統的爬蟲功能將制成三種爬蟲工作模式,第一種是默認的常規逐層爬蟲。第二種是搜索模式,通過將關鍵字輸入到網站搜索欄,然后進行搜索,例如對百度搜索結果進行爬蟲。第三種是URL拼接模式,按照RestFul的一個URL代表一個資源的概念,一般網站的URL都是設計得有規律的,URL拼接模式就是通過關鍵字拼接起來作為URL進行請求爬蟲。關鍵字管理功能就是對關鍵字進行導入和刪除。
11)退出系統功能:退出系統
數據采集員需求:數據采集員可修改密碼、登錄系統、管理爬蟲規則、查看爬蟲數據、下載爬蟲數據、啟動/停止爬蟲、解析數據、關鍵字管理、退出系統等功能。
① 登錄:因為這個系統目前設定為企業內部系統,而非商業性系統,因此無須開放注冊功能。系統管理員的賬戶密碼在系統部署時在數據庫進行預設。所有用戶在登錄時,系統校驗用戶名和密碼,正確則放行,錯誤則彈出提示信息。
② 修改密碼:可以修改個人密碼。
③ 管理爬蟲規則:對爬蟲規則進行添加、和配置刪除。
④ 查看爬蟲數據:查看當前爬蟲產生的原數據和提取數據。
⑤ 下載爬蟲數據:爬蟲數據成功提取后,可以導出為excel文檔。
⑥ 啟動/關閉爬蟲:手動開啟/關閉指定的爬蟲規則,自動功能開啟后禁用。
⑦ 解析數據:立即提取數據。
⑧ 關鍵字管理:本數據采集系統的爬蟲功能將制成三種爬蟲工作模式,第一種是默認的常規逐層爬蟲。第二種是搜索模式,通過將關鍵字輸入到網站搜索欄,然后進行搜索,例如對百度搜索結果進行爬蟲。第三種是URL拼接模式,按照RestFul的一個URL代表一個資源的概念,一般網站的URL都是設計得有規律的,URL拼接模式就是通過關鍵字拼接起來作為URL進行請求爬蟲。關鍵字管理功能就是對關鍵字進行導入和刪除。
⑨ 退出系統功能:退出系統。
3系統設計
3.1功能模塊劃分
3.1.1 前臺的主要功能模塊
根據需求分析,明白了本系統分為前臺和后臺兩個部分進行設計。前臺主要用于登錄系統、管理爬蟲規則、管理關鍵字、密碼修改、數據導出、退出系統等功能。后臺主要用于系統管理員對數據采集員的賬戶管理,系統設置,等功能。
本系統前臺可劃分為三大功能模塊,具體為:
1)系統操作模塊:包括登錄、密碼修改和退出系統功能。
2)爬蟲管理模塊:包括配置爬蟲規則、管理關鍵字功能。
3)數據管理模塊:包括啟動數據抓取、啟動數據解析和數據導出功能。
3.1.2 后臺的主要功能模塊
本系統后臺可劃分為兩大功能模塊,具體為:
1)用戶管理模塊:包括建新的用戶、修改信息、修改用戶密碼和刪除用戶等功能。
2)查詢模塊:主要是查看用戶操作日志功能。
3.2 數據庫設計
3.2.1 系統E-R圖
經過分析,本系統主要有十三個實體,分別是用戶、基礎規則實體、登錄規則實體、cookie實體、內容提取規則實體、分頁規則實體、拼接規則實體、搜索規則實體、關鍵字組實體、關鍵字實體、原數據實體、解析數據實體。系統E-R圖如圖1所示:
3.2.2 數據庫表設計
1)用戶表結構:用戶表-tuser用來存儲用戶信息,用于實現用戶信息的增、刪、改、查。在登錄時,會使用登錄信息與表內信息進行匹配,以驗證登錄。為確保安全,驗證前,用戶的密碼會進行一次MD5加密再和用戶表的密碼進行比對。
2)爬蟲基礎規則表結構:爬蟲基礎規則表-tcrawler_rule用來存儲爬蟲配置的基本規則,用戶標識一個爬蟲配置信息的最基本配置。該表記錄了目標網站的網站名,域名,爬蟲運行模式,網站首頁,網站過濾字段,默認模式用到的層級,進行爬蟲前是否需要登錄網站,當前一共有多少原數據,多少提取數據,當前運行狀態等信息。
3)登錄配置表結構:登錄配置表-taccount_msg用來存儲網站登錄配置信息的,有些網站在瀏覽某些數據時,可能需要處于登錄狀態才能瀏覽。那么配置如何登錄這些網站,顯然是必須的。該表就是記錄如登錄頁面的URL,登錄相關標簽的標簽,標簽唯一屬性名,標簽的唯一屬性值,和標簽的類型。之所以只設置一套用于查找的標簽的配置,是因為一般登錄的輸入框和提交按鈕都給了id作為唯一標識,為了簡化配置,這里就只給出一套配置。
4)cookie信息表結構:Cookie信息表-tcookie_msg用來存儲Cookie信息。有些的登錄可能會比較復雜,,簡單的配置可能無法滿足,因此這里提供了Cookie配置來冒充登錄,目前大部分網站為了方便用戶,都會將Sessionid寫入Cookie,讓用戶重新進入網站時免登錄,這樣我們就可以利用這一點,將這些可以登錄網站的Cookie記下來,讓爬蟲系統去瀏覽這些網站時帶上Cookie,就可以實現免登錄了。
5)搜索信息表結構:搜索信息表-tsearch_msg用來存儲搜索信息。有時候,我們的需求不是從某個網站逐層查找數據,而是獲取某個網頁的搜索結果,因此需要配置一個規則,來讓爬蟲“知道”如何進行搜索。配置信息有,搜索頁的Url,搜索的標簽,標簽名稱,標簽屬性名,標簽屬性值,填充關鍵字組的組id,標簽的作用類型(是提交按鈕還是輸入框)。
6)拼接信息表結構:拼接信息表-tconcat_msg用來存儲拼接信息。現在很多網站已經用上Restful風格的Url,來強調一個Uri代表一個資源的HtmlGet請求的原定義。因此我們可以以Url中的某一段或多段多為關鍵字拼接點,拼接出Url來請求我們需要的志愿。拼接信息表的記錄包括拼接位置,拼接用的單字串,拼接用的關鍵字組Id(單字串優先級高于關鍵字組)。
7)內容提取配置信息表結構:內容提取配置信息表-tcontent_index_rule用來存儲內容提取配置信息。用于記錄爬蟲直接挖去用于進行解析數據的Html部分,相當于在瀏覽器中查找進行OuterHtml操作的Domcument標簽,因為目標可能在不同網頁層,也可能在同層有多個的關系,因此最復雜的配置會呈一個多叉樹森林的結構,因此與其他配置的屬性相比,多了是否深入查找的標識,還有上層節點id(處于首層的節點ID為0)。
8)分頁配置信息表結構:分頁配置信息表-tpaging_index用來存儲分頁配置信息。有些時候,用戶要的數據不止目標第一頁,而是所有分頁。因此我們需要提供下一頁的獲取按鈕配置提供給用戶。這些信息包括父標簽配置,目標標簽配置,標簽倒數位置(因為有時候下一頁的按鈕沒有被做嚴格的屬性區分,因此需要這個來提高獲取目標的準確度)。
9)解析規則配置信息表結構:解析規則配置信息表-textract_content_rule用來存儲解析規則配置信息。內容提取規則拿到的數據是帶Html代碼的粗糙數據,不可直接使用的。因此,需要提供解析規則來將數據與Html代碼分離,并設置在導出時的排列規則。
10)關鍵字組信息表結構:關鍵字組信息表-tkeyword_group用來存儲關鍵字分組信息。這個表用于存放用于搜索模式和拼接模式所用到的關鍵字組的信息。
11)關鍵字信息表結構:關鍵字信息表-tkeyword用來存儲關鍵字信息。這個表用于存放用于搜索模式和拼接模式所用到的關鍵字組所包含的關鍵字。
12)原數據集合結構:原數據集合-SourceDataBean用來存儲爬蟲原數據的Mongo集合。原數據集合就是用于存放原數據的,在uuid相等的情況下,判斷多個原數據集合構成一條完整的數據。
13)解析數據集合結構:解析數據集合-ExtractDataBean用來存儲爬蟲解析數據的Mongo集合。解析數據集合就是用于存放數據的。其中的Map為<Integer,String>結構,Key值為數據的導出位置,Value為字段具體值。
4 系統功能實現
4.1 系統前臺功能實現
4.1.1 管理員登錄及數據采集員創建
系統部署時,會預先創建一個管理員賬戶。登錄功能是通過Spring Boot的攔截器實現的。當用戶請求網站時,攔截器會獲取Request對象來獲取Session對象,取SessionId去Redis查找是否存在用戶信息,存在則放行,不存在則跳轉到登錄頁面。登錄驗證成功后,系統會以SessionId為Key,用戶信息為Value存入Redis中。管理員可在登錄后瀏覽系統。
4.1.2 修改密碼實現
已經成功登錄的用戶可點擊導航欄右上角的修改密碼按鈕打開修改密碼界面。修改密碼時,系統會先取得頁面數據進入數據庫進行校驗,通過則允許修改密碼。輸入原密碼時會與原密碼進行校驗,并會對新密碼的長度和重復密碼進行校驗。
4.1.3 關鍵字管理實現
用戶成功登錄系統后可進行關鍵字管理,關鍵字管理的實現步驟如下:
1)點擊導航欄的關鍵字管理,打開關鍵字組列表。
2)點擊導入,彈出導入界面。
3)輸入組名并選擇好上傳文件后,上傳組名和文件選擇會有非空校驗,點擊確定即可上傳文件。在導入成功創建數據后,用戶可以選中條目點擊確定按鈕進行刪除,也可以單獨點擊條目的刪除按鈕進行刪除。
4)導入成功后,點擊組名,可以查詢里面的詳細關鍵字,其中點擊添加可以單獨添加一個數字,也可以點擊條目的修改按鈕進行修改。用戶可以選中條目點擊確定按鈕進行刪除,也可以單獨點擊條目的刪除按鈕進行刪除。
4.1.4 爬蟲規則管理實現
爬蟲規則會存儲在Mysql數據庫中,實現規則查詢功能,當用戶查詢規則時,把存儲在數據庫中該用戶添加的規則的基礎規則列到前臺顯示。此外,用戶還可以選中規則,進行修改,刪除,查看原數據,查看提取數據。
4.1.5 添加爬蟲規則實現
用戶可以為自己添加爬蟲規則。添加規則的第一步是點擊爬蟲規則列表的添加按鈕打開基礎規則添加頁面,這里由于爬蟲分三個模式,而三個模式的第一步,第二步配置均不同,因此這里會取三個例子進行配置。 基本規則添加完成并保存后,進入第二步添加抓取規則。通過第一步配置的工作模式,使用JSTL對第二步的頁面進行渲染。這一環,我們主要配置數據抓取的位置規則,這里的配置,我們必須確保準確。此外,本數據采集系統的爬蟲功能還支持搜索模式和Url拼接模式,它們三者之間的提取規則有少許不同,這里將展示搜索模式和Url拼接模式下的配置界面。第三步,添加數據提?。ń馕觯┮巹t。用于將爬蟲根據前面配置的規則抓出來的。添加數據提?。ń馕觯┮巹t完成后,系統將會跳轉到配置完成頁面,并于10秒后自動返回爬蟲配置列表頁面。
4.2 系統后臺功能實現
4.2.1 用戶管理實現
系統管理員賬號在這本數據采集系統內有權控制所有用戶。管理員根據用戶名和密碼登錄系統。登錄后,主界面導航會比數據采集員多出一個設置導航。這一點通過JSTL實現,通過獲取用戶類型,判斷是否渲染設置中心模塊。管理員將鼠標移動到設置導航上會出現下拉菜單,其中一個就是賬戶管理,點擊該菜單即可進入賬戶管理界面。在這里,管理員可以進行與所有用戶相關的,包括創建新的用戶,修改信息,修改用戶密碼,刪除用戶。
4.2.2 操作日志實現
系統管理員賬號在這本數據采集系統內有權查看所有用戶的操作記錄。管理員根據用戶名和密碼登錄系統。登錄后點擊設置中心下拉菜單中的操作日志即可查看所有用戶的操作日志。用戶在請求時,系統會通過反射機制,獲取傳入參數和預設的操作類型,將參數和類型按預設的規則進行拼接后,存入操作記錄表,就能實現操作日志。
4.2.3 爬蟲自動啟動實現
系統管理員登錄本數據采集系統后,點擊數據采集進入爬蟲規則列表頁面會多出一個更改自動啟動狀態的按鈕。系統部署前,使用Quartz任務調度框架設定一個定時執行爬蟲的任務,并在任務前加上一個Boolean型的靜態變量進行判斷。自動啟動按鈕就是通過修改這個靜態變量的值來實現開啟、關閉自動啟動功能的。
5 結論
本系統基于SSM框架的數據采集系統,前臺采用的是SpringBoot框架和JSP技術進行開發,后臺采用HtmlUnit框架進行爬蟲業務的開發,采用MySQL 數據庫及MongoDB進行數據的存儲和支撐,開發模式采用的是B/S模式的Web應用程序。實現了功能需求里面擬定的功能,各項功能都可以正常運行。
參考文獻:
[1] 于娟,劉強.主題網絡爬蟲研究綜述[J].計算機工程與科學,2015,37(2):231-237.
[2] 李朝奎,楊武,殷智慧,等.MongoDB的遙感影像分布式存儲策略研究[J].測繪通報,2014(5):70-72.
[3] 張樹新,吳海斌,蒙輝,湯麥倫.基于SpringCloud的航運EDI平臺IT生態環境設計[J]. 中國儲運, 2018(2):100-103.
[4] 朱亞興,余愛民.王夷.基于Redis+MySQL+MongoDB存儲架構應用[J].微型機與應用,2014,33(13):3-5.
[5] 肖毅,張林,聶笑一.基于WEB挖掘的網絡爬蟲設計與實現[J].計算機系統應用,2013(9):60-63.
[6] 王芳,陳海建.深入解析Web主題爬蟲的關鍵性原理[J].微型電腦應用,2011(7):76-78.