王思敏 尹伊秋 宣靜雯 馬沖



摘 ?要: 數字資源受網絡狀態的影響故障頻發,圖書館作為高校信息文化的傳播中心,做好資源的保障工作意義重大。文中設計實現一種基于爬蟲技術的數字資源自動監測系統。該系統利用日志文件替代數據庫軟件,降低軟件復雜度;利用爬蟲技術及正則解析,獲取監測URL的狀態值和數據庫定制名稱,監測結果通過郵件自動發送給所有管理員。實驗結果表明,該系統具有較好的擴展性能,在任何網絡壞境和IP地址下,均能準確進行檢測,對運行環境要求低,穩定性好,無需人工操作。
關鍵詞: 數字資源; 自動監測; 網絡爬蟲; 日志文件; 正則解析; 檢測軟件
中圖分類號: TN919?34; G250 ? ? ? ? ? ? ? ? ?文獻標識碼: A ? ? ? ? ? ? ? ? ? ?文章編號: 1004?373X(2019)10?0132?04
Design and implementation of digital resource detection software based on
web crawler technology
WANG Simin1,2, YIN Yiqiu1, XUAN Jingwen1, MA Chong1
(1. Xian Polytechnic University, Xian 710048, China; 2. School of Electronics and Information, Xian Jiaotong University, Xian 710049, China)
Abstract: Frequent failures occur for digital resources which can be easily affected by network states, and it is of great significance to do the resource protection work well for the library which is the communication center of information culture in university. Therefore, a digital resource automatic monitoring system based on the crawler technology is designed and implemented in this paper. In the system, the database software is substituted for log files to reduce software complexity. The crawler technology and regular parsing are used to obtain and monitor the state values of URL and custom names of database. The monitoring results are automatically sent to all administrators by email. The experimental results show that the system has a good scalable performance, and can conduct detection accurately in any network environment and IP address, which has a low requirement on running environments and good stability, and needs no manual operations.
Keywords: digital resource; automatic monitoring; web crawler; log file; regular parsing; detection software
電子資源由于獲取方便、易于檢索,已成為教學、科研工作不可或缺的文獻來源。在圖書館界,越來越多的圖書館加大了電子資源的采購力度;然而電子資源的訪問受用戶操作系統、網絡傳輸、數據庫商服務器多方面影響,停電、斷網、網速過慢、服務器負載過重、宕機等都會造成資源無法訪問[1]。在圖書館不斷加強數字館藏建設的同時,也造成了數據庫運維人員工作壓力的不斷增加。個別數據庫發生故障,連續數月無法訪問卻無人發現,這不僅是對資源極大的浪費,同時也降低了用戶滿意度。因此及時監測電子資源的可訪問性,捕捉訪問故障,有的放矢地進行維修和維護,是電子資源管理工作的關鍵[2?3]。
1 ?電子資源監測的主要方法
1.1 ?人工監測
人工監測通過人工逐個訪問電子資源,手工檢索并下載,判斷電子資源是否可用。該方法勞動強度大、受管理人員主觀因素影響大。筆者所在西安工程大學圖書館,為了規范數字資源管理,在圖書館內抽調了12名圖書館年輕館員,組建數據庫 “周檢月報”小組,每周對數據進行抽檢,即時排除數據庫使用故障。由于人工檢測速度慢、效率低,即使一周檢查一次,也難以避免假期或工作繁忙時的漏檢,不僅費力且效果不佳,不能實現數據庫的連續監測。
1.2 ?監測軟件
目前,商業網絡監測軟件主要有Simple Server Monitor,McAfee Secure,Uptime Software,PA Server Monitor等。國內較為成熟的有聚生網管、SUM等,主要監測遠程服務器是否正常運轉。商業軟件通常價格昂貴,很多高校圖書館選擇自行開發[4]。例如,莊紀林結合圖書館網絡服務的特點,分析了“遠程登錄”和“安裝代理”類商業化軟件不適合數字圖書館網絡服務監測的原因,并自行設計開發了“基于內容”的圖書館網絡服務監測方案和管理系統[5]。宋磊等設計并實現基于開源軟件Nagios的網絡服務監控管理系統[6]。彭曉慶使用SNMP及J2EE技術監控電子資源服務器,當服務器假死造成的終端用戶無法訪問網絡以及電子資源時,可自動重啟服務器[7]。溫曉明使用Python編制軟件,通過模擬人機交互等操作對山東大學圖書館OPAC運行狀況進行監控[8]。朱玉強采用操作網頁文檔等方式,模擬真人操作電子資源,以監測各電子資源可否正常提供服務[9]。
以上軟件設計大都基于各種網絡傳輸協議、檢測服務器端是否運行正常或檢查特定的程序。一般都架構在SQL Server或者Access等數據庫軟件之上,軟件功能較完善,但開發難度和技術成本較高,對操作系統及安裝配置人員有一定要求[9?10]。而本文介紹的基于網絡爬蟲技術的數字資源檢測軟件,用Python語言設計并實現,真正實現了免安裝,對操作系統零要求,能夠代替人工,定時檢測數據庫資源的訪問情況并將檢測結果發送到管理員郵箱,避免了操作軟件的麻煩。由于爬蟲技術的使用,可以在不用網絡壞境和IP地址下,準確對網頁進行解析和監測,提高了系統的自適應性和擴展性,便于在圖書館中推廣。
2 ?自動監測系統的架構及流程
2.1 ?系統總體架構
數字資源自動監測系統的總體架構,主要有資源層、執行層、功能實現層和信息表現層。系統架構見圖1。
資源層:需要檢測的URL地址文件,是資源監測的基礎。軟件設計利用日志文件系統代替SQL Server,Access等數據庫軟件存儲URL地址信息,使得程序綠色免安裝,降低了系統安裝和使用的復雜度。

圖1 ?系統架構圖
執行層:讀取URL地址并逐個發送訪問請求,進行鏈接可用性檢測;并利用蜘蛛引擎,自動檢索 Web 文檔,提取網頁的內容。
功能實現層:對爬取的網頁內容進行解析,支持多種格式的頁面;同時提取有價值的數據,如返回時間、狀態、錯誤代碼,對異常情況進行處理,將檢測結果生成日志文件并存儲。
信息表現層:將檢測結果與前一次運行結果日志進行對比分析,對訪問異常狀態加以提示,并以列表的形式發送至管理員郵箱。
2.2 ?系統運行流程
可利用Windows自帶的定時執行功能每天自動運行程序。運行流程如圖2所示。具體運行過程如下:
1) 開始,讀取配置文件中的URL地址;
2) 蜘蛛引擎啟動,向每個URL地址發送訪問請求,檢測鏈接的可用性;
3) 接收HTTP響應信息,根據預先設置的響應時間閾值(200 ms),將訪問速度劃分為OK(≤200 ms),SLOW(>200 ms),當超過10 s未收到HTTP響應時,重新發送訪問請求,3次訪問均無響應,視為訪問失敗,記為DOWN;
4) 網頁解析,通過正則表達式,將不同網頁格式中的信息,如HTTP返回狀態值、返回時間、數據庫名稱等準確提取出來,對異常情況進行處理;
5) 處理日志文件,更新上一次檢測日志和當前檢測日志;
6) 數據對比,生成報告,發送至用戶郵箱,完成本次檢測任務。
3 ?關鍵方法與技術
3.1 ?利用蜘蛛引擎進行鏈接檢測
蜘蛛引擎的基本操作是把URL地址中的網絡資源從網絡流中提取出來。爬取頁面內容時會涉及到HTTP協議返回的響應狀態碼。當用戶向服務器發送請求,如能成功地獲取請求的資源,返回狀態碼“200”;如請求的資源不存在,通常返回“404”錯誤。

圖2 ?系統流程圖
網絡爬蟲運行過程中,需要進一步對復雜的HTML頁面進行解析,才能提取出有用的信息。HTML編碼格式很多,利用正則表達式來解析和限定不同編碼格式下抓取的內容。
url=′http://cssci.nju.edu.cn/′ ? ? ? ? ? ? ? ? ? ?//檢測URL地址
try: ?headers = {′User?Agent′ : ′Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) ? ?//使用代理,隱藏爬蟲程序的身份,避免
一些網站拒絕被爬蟲程序訪問
′Accept′: ′text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8′,′Accept?Encoding′ : ′gzip′}
//服務器向支持gzip的瀏覽器返回gzip編碼的HTML頁面, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?該編碼方式可減少0.1~0.2的下載時間
begin_time=str(time.time()) ? ? ? ? ? ? ? ? ? ? //記錄開始時間
r = requests.Session.get(url,headers = headers,timeout=10)
//用蜘蛛引擎抓取網頁內容,timeout為響應超時字段,設置為10 s
end_time = str(time.time()) ? ? ? ? ? ? ? ? ? ? ?//記錄結束時間
if r.status_code == 200: ? ? ? ?//獲取HTTP返回狀態,返回值
“200”表示服務器已成功處理了請求
soup = BeautifulSoup(text, parseOnlyThese=strainer, fromEncoding="gb18030") ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//網頁內容解析
title = get_title(soup) ? ? //獲取URL對應的數據庫真實名稱
else: return str(404),begin_time,begin_time,"unknow"
//服務器未成功處理了請求
return r.status_code,begin_time,end_time,data[′title′]
//檢測完畢,返回HTTP狀態碼,開始時間,結束時間,URL名稱
3.2 ?日志文件處理
軟件運行過程中會生成4個日志文件。sitemonitor.previous.status記錄前一次檢測結果,sitemonitor.current.status記錄本次檢測結果,report.txt在對比前兩次檢測結果的基礎上生成檢測報告。為了便于用戶閱讀檢測報告,系統另外生成了HTML類型的report文件,將不同檢測結果(OK,SLOW,DOWN)分類顯示,以郵件形式發送給用戶。以下為部分生成report.txt文件的代碼。
filepath=′report.txt′ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//日志文件名稱
filepath=os.path.join(basedir, filepath) ? ? ? ? ? ? ? //存儲路徑
with open(filepath, ′w′) as f: ? ? //生成檢測報告,記錄本次
檢測操作的開始和結束時間
f.write(′Start date : %s\n′ % start_process_date_str)
f.write(′End date : %s\n′ % end_process_date_str)
for status in [STATUS_DOWN, STATUS_SLOW, STATUS_OK]:
//URL檢測結果逐條寫入日志
′Previous status : %s : Previous HTTP code : %s\n′
//讀取前一次檢測結果和響應狀態
f.write(line_text % (host[′website′],host[′webtitle′],host[′response_time′],host[′http_code′], host[′previous_status′], host[′previous_http_code′]))
//在日志文件中寫入URL地址、URL名稱、響應時間、HTTP
返回值、上一次響應狀態(OK,SLOW,DOWM)、HTTP返回值
send_report_by_mail(True) ? ? ? ? ? ? ? ? ? ? ? ? ? ? //發送郵件
4 ?測試效果
為了測試軟件性能,在不同網絡環境下進行了實地測試。將軟件拷貝至電腦的任意位置,甚至在U盤中,均可以流暢運行,對電腦配置無要求。運行時間在4 min 30 s左右。
1) 鏈接檢測準確。從軟件運行6個月的總體情況來看,整體檢測正確率100%。系統設置的檢測URL地址為73個,95%數據庫檢測結果為OK或者SLOW,5%數據庫為DOWN。當檢測結果為OK和SLOW時,表明電子資源可用,系統記錄HTTP的響應時間和狀態碼;檢測結果為DOWN時,電子資源無法訪問,或者HTTP返回速度過慢(超過10 s),超出規定的響應時間上限。
2) 擴展性測試。軟件在西安工程大學和西安交通大學網絡環境中,均準能抓取到URL鏈接所對應的數據庫名稱,并能夠根據IP地址變化準確解析出相應的定制數據庫名稱。例如網址http://www.duxiu.com,在兩所院校中運行結果分別為:西安工程大學學術搜索和西安交通大學學術搜索。軟件在不同網絡環境下無需配置,便可準確運行。運行結果見圖3、圖4。
另外,為便于區分網絡故障和數據庫自身故障,檢測時引入若干大型門戶網站,如Baidu和Sina等,當故障發生時,可通過觀察門戶網站是否能正常訪問,來判斷數據庫故障是本校網絡自身故障還是數據庫商故障,以便有的放矢地尋求解決辦法。當然計算機并非萬能,僅僅通過軟件進行檢測,并不能完全說服。將計算機技術和人工抽檢結合起來,可以達到事半功倍的效果。以筆者所在西安工程大學為例,圖書館數據庫管理員人工對于出現故障的幾個數據庫進行截圖、留存,并及時向數據庫商反饋。通過這種方式,在2017年成功地跟數據庫商進行談判,抵制了某外文數據庫的漲價要求。

圖3 ?在西安工程大學運行結果(部分)

圖4 ?在西安交通大學運行結果(部分)
5 ?結 ?語
本文設計基于網絡爬蟲技術的數字資源鏈接監測軟件,可以每日定時執行,365天記錄數據庫全年整體運行情況,將數據庫管理人員從繁重的工作中解脫出來,還可以提高讀者滿意度,提升服務水平,必要時也是跟數據庫商談判、維護自身權益的有效工具。
參考文獻
[1] 葉蘭.電子資源管理系統實施與應用研究[J].圖書情報工作,2012,56(13):89?94.
YE Lan. Planning and implementing an electronic resource management system [J]. Library and information service, 2012, 56(13): 89?94.
[2] 史克紅.圖書館數字資源訪問監控系統的設計與實現[J].圖書館理論與實踐,2016(7):93?96.
SHI Kehong. The design and implementation of library digital resource evaluation system [J]. Library theory and practice, 2016(7): 93?96.
[3] 陳濤.網絡服務性能監測系統設計與實現[J].現代電子技術,2010,33(10):133?135.
CHEN Tao. Design and implementation of network service performance monitoring system [J]. Modern electronics technique, 2010, 33(10): 133?135.
[4] 龍凈林.評價與發揮高校數字圖書館數字資源服務能力研究[J].圖書館理論與實踐,2016(12):101?104.
LONG Jinglin. Evaluation and exertion of digital resources service ability of university digital library [J]. Library theory and practice, 2016(12): 101?104.
[5] 莊紀林.數字圖書館網絡服務的監測[J].大學圖書館學報,2008,26(3):38?42.
ZHUANG Jilin. The monitoring of network service in digital library [J]. Journal of academic libraries, 2008, 26(3): 38?42.
[6] 宋磊,王靜文.OpenBSD下基于Nagios的網絡服務監控報警系統的研究[J].電腦編程技巧與維護,2009(14):112?113.
SONG Lei, WANG Jingwen. Research of network services monitor & alarm system based on Nagios under OpenBSD [J]. Computer programming skills & maintenance, 2009(14):112?113.
[7] 彭曉慶.高校圖書館電子資源服務監控系統設計與實現[J].現代圖書情報技術,2011,27(4):82?88.
PENG Xiaoqing. Design and realization of the library electronic resources service monitoring system [J]. New technology of library and information service, 2011, 27(4): 82?88.
[8] 溫曉明.基于Python的電子資源可用性檢測方案[J].中華醫學圖書情報雜志,2013,22(1):68?71.
WEN Xiaoming. Python?based detection plan for accessible electronic resources [J]. Chinese journal of medical library and information science, 2013, 22(1): 68?71.
[9] 朱玉強.圖書館電子資源可否瀏覽及下載監測程序設計[J].現代圖書情報技術,2013,29(11):86?90.
ZHU Yuqiang. Design of monitoring program to detect the browsable and downloadable status of library′s electronic resources [J]. New technology of library and information service, 2013, 29(11): 86?90.
[10] 張昕,孫江輝.輿情監測系統設計[J].現代電子技術,2015,38(11):98?102.
ZHANG Xin, SUN Jianghui. Design of public opinion monitoring system [J]. Modern electronics technique, 2015, 38(11): 98?102.