王思敏 尹伊秋 宣靜雯 馬沖
摘 ?要: 數(shù)字資源受網(wǎng)絡(luò)狀態(tài)的影響故障頻發(fā),圖書館作為高校信息文化的傳播中心,做好資源的保障工作意義重大。文中設(shè)計(jì)實(shí)現(xiàn)一種基于爬蟲技術(shù)的數(shù)字資源自動(dòng)監(jiān)測系統(tǒng)。該系統(tǒng)利用日志文件替代數(shù)據(jù)庫軟件,降低軟件復(fù)雜度;利用爬蟲技術(shù)及正則解析,獲取監(jiān)測URL的狀態(tài)值和數(shù)據(jù)庫定制名稱,監(jiān)測結(jié)果通過郵件自動(dòng)發(fā)送給所有管理員。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)具有較好的擴(kuò)展性能,在任何網(wǎng)絡(luò)壞境和IP地址下,均能準(zhǔn)確進(jìn)行檢測,對運(yùn)行環(huán)境要求低,穩(wěn)定性好,無需人工操作。
關(guān)鍵詞: 數(shù)字資源; 自動(dòng)監(jiān)測; 網(wǎng)絡(luò)爬蟲; 日志文件; 正則解析; 檢測軟件
中圖分類號: TN919?34; G250 ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識碼: 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
電子資源由于獲取方便、易于檢索,已成為教學(xué)、科研工作不可或缺的文獻(xiàn)來源。在圖書館界,越來越多的圖書館加大了電子資源的采購力度;然而電子資源的訪問受用戶操作系統(tǒng)、網(wǎng)絡(luò)傳輸、數(shù)據(jù)庫商服務(wù)器多方面影響,停電、斷網(wǎng)、網(wǎng)速過慢、服務(wù)器負(fù)載過重、宕機(jī)等都會(huì)造成資源無法訪問[1]。在圖書館不斷加強(qiáng)數(shù)字館藏建設(shè)的同時(shí),也造成了數(shù)據(jù)庫運(yùn)維人員工作壓力的不斷增加。個(gè)別數(shù)據(jù)庫發(fā)生故障,連續(xù)數(shù)月無法訪問卻無人發(fā)現(xiàn),這不僅是對資源極大的浪費(fèi),同時(shí)也降低了用戶滿意度。因此及時(shí)監(jiān)測電子資源的可訪問性,捕捉訪問故障,有的放矢地進(jìn)行維修和維護(hù),是電子資源管理工作的關(guān)鍵[2?3]。
1 ?電子資源監(jiān)測的主要方法
1.1 ?人工監(jiān)測
人工監(jiān)測通過人工逐個(gè)訪問電子資源,手工檢索并下載,判斷電子資源是否可用。該方法勞動(dòng)強(qiáng)度大、受管理人員主觀因素影響大。筆者所在西安工程大學(xué)圖書館,為了規(guī)范數(shù)字資源管理,在圖書館內(nèi)抽調(diào)了12名圖書館年輕館員,組建數(shù)據(jù)庫 “周檢月報(bào)”小組,每周對數(shù)據(jù)進(jìn)行抽檢,即時(shí)排除數(shù)據(jù)庫使用故障。由于人工檢測速度慢、效率低,即使一周檢查一次,也難以避免假期或工作繁忙時(shí)的漏檢,不僅費(fèi)力且效果不佳,不能實(shí)現(xiàn)數(shù)據(jù)庫的連續(xù)監(jiān)測。
1.2 ?監(jiān)測軟件
目前,商業(yè)網(wǎng)絡(luò)監(jiān)測軟件主要有Simple Server Monitor,McAfee Secure,Uptime Software,PA Server Monitor等。國內(nèi)較為成熟的有聚生網(wǎng)管、SUM等,主要監(jiān)測遠(yuǎn)程服務(wù)器是否正常運(yùn)轉(zhuǎn)。商業(yè)軟件通常價(jià)格昂貴,很多高校圖書館選擇自行開發(fā)[4]。例如,莊紀(jì)林結(jié)合圖書館網(wǎng)絡(luò)服務(wù)的特點(diǎn),分析了“遠(yuǎn)程登錄”和“安裝代理”類商業(yè)化軟件不適合數(shù)字圖書館網(wǎng)絡(luò)服務(wù)監(jiān)測的原因,并自行設(shè)計(jì)開發(fā)了“基于內(nèi)容”的圖書館網(wǎng)絡(luò)服務(wù)監(jiān)測方案和管理系統(tǒng)[5]。宋磊等設(shè)計(jì)并實(shí)現(xiàn)基于開源軟件Nagios的網(wǎng)絡(luò)服務(wù)監(jiān)控管理系統(tǒng)[6]。彭曉慶使用SNMP及J2EE技術(shù)監(jiān)控電子資源服務(wù)器,當(dāng)服務(wù)器假死造成的終端用戶無法訪問網(wǎng)絡(luò)以及電子資源時(shí),可自動(dòng)重啟服務(wù)器[7]。溫曉明使用Python編制軟件,通過模擬人機(jī)交互等操作對山東大學(xué)圖書館OPAC運(yùn)行狀況進(jìn)行監(jiān)控[8]。朱玉強(qiáng)采用操作網(wǎng)頁文檔等方式,模擬真人操作電子資源,以監(jiān)測各電子資源可否正常提供服務(wù)[9]。
以上軟件設(shè)計(jì)大都基于各種網(wǎng)絡(luò)傳輸協(xié)議、檢測服務(wù)器端是否運(yùn)行正?;驒z查特定的程序。一般都架構(gòu)在SQL Server或者Access等數(shù)據(jù)庫軟件之上,軟件功能較完善,但開發(fā)難度和技術(shù)成本較高,對操作系統(tǒng)及安裝配置人員有一定要求[9?10]。而本文介紹的基于網(wǎng)絡(luò)爬蟲技術(shù)的數(shù)字資源檢測軟件,用Python語言設(shè)計(jì)并實(shí)現(xiàn),真正實(shí)現(xiàn)了免安裝,對操作系統(tǒng)零要求,能夠代替人工,定時(shí)檢測數(shù)據(jù)庫資源的訪問情況并將檢測結(jié)果發(fā)送到管理員郵箱,避免了操作軟件的麻煩。由于爬蟲技術(shù)的使用,可以在不用網(wǎng)絡(luò)壞境和IP地址下,準(zhǔn)確對網(wǎng)頁進(jìn)行解析和監(jiān)測,提高了系統(tǒng)的自適應(yīng)性和擴(kuò)展性,便于在圖書館中推廣。
2 ?自動(dòng)監(jiān)測系統(tǒng)的架構(gòu)及流程
2.1 ?系統(tǒng)總體架構(gòu)
數(shù)字資源自動(dòng)監(jiān)測系統(tǒng)的總體架構(gòu),主要有資源層、執(zhí)行層、功能實(shí)現(xiàn)層和信息表現(xiàn)層。系統(tǒng)架構(gòu)見圖1。
資源層:需要檢測的URL地址文件,是資源監(jiān)測的基礎(chǔ)。軟件設(shè)計(jì)利用日志文件系統(tǒng)代替SQL Server,Access等數(shù)據(jù)庫軟件存儲(chǔ)URL地址信息,使得程序綠色免安裝,降低了系統(tǒng)安裝和使用的復(fù)雜度。
圖1 ?系統(tǒng)架構(gòu)圖
執(zhí)行層:讀取URL地址并逐個(gè)發(fā)送訪問請求,進(jìn)行鏈接可用性檢測;并利用蜘蛛引擎,自動(dòng)檢索 Web 文檔,提取網(wǎng)頁的內(nèi)容。
功能實(shí)現(xiàn)層:對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析,支持多種格式的頁面;同時(shí)提取有價(jià)值的數(shù)據(jù),如返回時(shí)間、狀態(tài)、錯(cuò)誤代碼,對異常情況進(jìn)行處理,將檢測結(jié)果生成日志文件并存儲(chǔ)。
信息表現(xiàn)層:將檢測結(jié)果與前一次運(yùn)行結(jié)果日志進(jìn)行對比分析,對訪問異常狀態(tài)加以提示,并以列表的形式發(fā)送至管理員郵箱。
2.2 ?系統(tǒng)運(yùn)行流程
可利用Windows自帶的定時(shí)執(zhí)行功能每天自動(dòng)運(yùn)行程序。運(yùn)行流程如圖2所示。具體運(yùn)行過程如下:
1) 開始,讀取配置文件中的URL地址;
2) 蜘蛛引擎啟動(dòng),向每個(gè)URL地址發(fā)送訪問請求,檢測鏈接的可用性;
3) 接收HTTP響應(yīng)信息,根據(jù)預(yù)先設(shè)置的響應(yīng)時(shí)間閾值(200 ms),將訪問速度劃分為OK(≤200 ms),SLOW(>200 ms),當(dāng)超過10 s未收到HTTP響應(yīng)時(shí),重新發(fā)送訪問請求,3次訪問均無響應(yīng),視為訪問失敗,記為DOWN;
4) 網(wǎng)頁解析,通過正則表達(dá)式,將不同網(wǎng)頁格式中的信息,如HTTP返回狀態(tài)值、返回時(shí)間、數(shù)據(jù)庫名稱等準(zhǔn)確提取出來,對異常情況進(jìn)行處理;
5) 處理日志文件,更新上一次檢測日志和當(dāng)前檢測日志;
6) 數(shù)據(jù)對比,生成報(bào)告,發(fā)送至用戶郵箱,完成本次檢測任務(wù)。
3 ?關(guān)鍵方法與技術(shù)
3.1 ?利用蜘蛛引擎進(jìn)行鏈接檢測
蜘蛛引擎的基本操作是把URL地址中的網(wǎng)絡(luò)資源從網(wǎng)絡(luò)流中提取出來。爬取頁面內(nèi)容時(shí)會(huì)涉及到HTTP協(xié)議返回的響應(yīng)狀態(tài)碼。當(dāng)用戶向服務(wù)器發(fā)送請求,如能成功地獲取請求的資源,返回狀態(tài)碼“200”;如請求的資源不存在,通常返回“404”錯(cuò)誤。
圖2 ?系統(tǒng)流程圖
網(wǎng)絡(luò)爬蟲運(yùn)行過程中,需要進(jìn)一步對復(fù)雜的HTML頁面進(jìn)行解析,才能提取出有用的信息。HTML編碼格式很多,利用正則表達(dá)式來解析和限定不同編碼格式下抓取的內(nèi)容。
url=′http://cssci.nju.edu.cn/′ ? ? ? ? ? ? ? ? ? ?//檢測URL地址
try: ?headers = {′User?Agent′ : ′Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) ? ?//使用代理,隱藏爬蟲程序的身份,避免
一些網(wǎng)站拒絕被爬蟲程序訪問
′Accept′: ′text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8′,′Accept?Encoding′ : ′gzip′}
//服務(wù)器向支持gzip的瀏覽器返回gzip編碼的HTML頁面, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?該編碼方式可減少0.1~0.2的下載時(shí)間
begin_time=str(time.time()) ? ? ? ? ? ? ? ? ? ? //記錄開始時(shí)間
r = requests.Session.get(url,headers = headers,timeout=10)
//用蜘蛛引擎抓取網(wǎng)頁內(nèi)容,timeout為響應(yīng)超時(shí)字段,設(shè)置為10 s
end_time = str(time.time()) ? ? ? ? ? ? ? ? ? ? ?//記錄結(jié)束時(shí)間
if r.status_code == 200: ? ? ? ?//獲取HTTP返回狀態(tài),返回值
“200”表示服務(wù)器已成功處理了請求
soup = BeautifulSoup(text, parseOnlyThese=strainer, fromEncoding="gb18030") ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//網(wǎng)頁內(nèi)容解析
title = get_title(soup) ? ? //獲取URL對應(yīng)的數(shù)據(jù)庫真實(shí)名稱
else: return str(404),begin_time,begin_time,"unknow"
//服務(wù)器未成功處理了請求
return r.status_code,begin_time,end_time,data[′title′]
//檢測完畢,返回HTTP狀態(tài)碼,開始時(shí)間,結(jié)束時(shí)間,URL名稱
3.2 ?日志文件處理
軟件運(yùn)行過程中會(huì)生成4個(gè)日志文件。sitemonitor.previous.status記錄前一次檢測結(jié)果,sitemonitor.current.status記錄本次檢測結(jié)果,report.txt在對比前兩次檢測結(jié)果的基礎(chǔ)上生成檢測報(bào)告。為了便于用戶閱讀檢測報(bào)告,系統(tǒng)另外生成了HTML類型的report文件,將不同檢測結(jié)果(OK,SLOW,DOWN)分類顯示,以郵件形式發(fā)送給用戶。以下為部分生成report.txt文件的代碼。
filepath=′report.txt′ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//日志文件名稱
filepath=os.path.join(basedir, filepath) ? ? ? ? ? ? ? //存儲(chǔ)路徑
with open(filepath, ′w′) as f: ? ? //生成檢測報(bào)告,記錄本次
檢測操作的開始和結(jié)束時(shí)間
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檢測結(jié)果逐條寫入日志
′Previous status : %s : Previous HTTP code : %s\n′
//讀取前一次檢測結(jié)果和響應(yīng)狀態(tài)
f.write(line_text % (host[′website′],host[′webtitle′],host[′response_time′],host[′http_code′], host[′previous_status′], host[′previous_http_code′]))
//在日志文件中寫入U(xiǎn)RL地址、URL名稱、響應(yīng)時(shí)間、HTTP
返回值、上一次響應(yīng)狀態(tài)(OK,SLOW,DOWM)、HTTP返回值
send_report_by_mail(True) ? ? ? ? ? ? ? ? ? ? ? ? ? ? //發(fā)送郵件
4 ?測試效果
為了測試軟件性能,在不同網(wǎng)絡(luò)環(huán)境下進(jìn)行了實(shí)地測試。將軟件拷貝至電腦的任意位置,甚至在U盤中,均可以流暢運(yùn)行,對電腦配置無要求。運(yùn)行時(shí)間在4 min 30 s左右。
1) 鏈接檢測準(zhǔn)確。從軟件運(yùn)行6個(gè)月的總體情況來看,整體檢測正確率100%。系統(tǒng)設(shè)置的檢測URL地址為73個(gè),95%數(shù)據(jù)庫檢測結(jié)果為OK或者SLOW,5%數(shù)據(jù)庫為DOWN。當(dāng)檢測結(jié)果為OK和SLOW時(shí),表明電子資源可用,系統(tǒng)記錄HTTP的響應(yīng)時(shí)間和狀態(tài)碼;檢測結(jié)果為DOWN時(shí),電子資源無法訪問,或者HTTP返回速度過慢(超過10 s),超出規(guī)定的響應(yīng)時(shí)間上限。
2) 擴(kuò)展性測試。軟件在西安工程大學(xué)和西安交通大學(xué)網(wǎng)絡(luò)環(huán)境中,均準(zhǔn)能抓取到URL鏈接所對應(yīng)的數(shù)據(jù)庫名稱,并能夠根據(jù)IP地址變化準(zhǔn)確解析出相應(yīng)的定制數(shù)據(jù)庫名稱。例如網(wǎng)址http://www.duxiu.com,在兩所院校中運(yùn)行結(jié)果分別為:西安工程大學(xué)學(xué)術(shù)搜索和西安交通大學(xué)學(xué)術(shù)搜索。軟件在不同網(wǎng)絡(luò)環(huán)境下無需配置,便可準(zhǔn)確運(yùn)行。運(yùn)行結(jié)果見圖3、圖4。
另外,為便于區(qū)分網(wǎng)絡(luò)故障和數(shù)據(jù)庫自身故障,檢測時(shí)引入若干大型門戶網(wǎng)站,如Baidu和Sina等,當(dāng)故障發(fā)生時(shí),可通過觀察門戶網(wǎng)站是否能正常訪問,來判斷數(shù)據(jù)庫故障是本校網(wǎng)絡(luò)自身故障還是數(shù)據(jù)庫商故障,以便有的放矢地尋求解決辦法。當(dāng)然計(jì)算機(jī)并非萬能,僅僅通過軟件進(jìn)行檢測,并不能完全說服。將計(jì)算機(jī)技術(shù)和人工抽檢結(jié)合起來,可以達(dá)到事半功倍的效果。以筆者所在西安工程大學(xué)為例,圖書館數(shù)據(jù)庫管理員人工對于出現(xiàn)故障的幾個(gè)數(shù)據(jù)庫進(jìn)行截圖、留存,并及時(shí)向數(shù)據(jù)庫商反饋。通過這種方式,在2017年成功地跟數(shù)據(jù)庫商進(jìn)行談判,抵制了某外文數(shù)據(jù)庫的漲價(jià)要求。
圖3 ?在西安工程大學(xué)運(yùn)行結(jié)果(部分)
圖4 ?在西安交通大學(xué)運(yùn)行結(jié)果(部分)
5 ?結(jié) ?語
本文設(shè)計(jì)基于網(wǎng)絡(luò)爬蟲技術(shù)的數(shù)字資源鏈接監(jiān)測軟件,可以每日定時(shí)執(zhí)行,365天記錄數(shù)據(jù)庫全年整體運(yùn)行情況,將數(shù)據(jù)庫管理人員從繁重的工作中解脫出來,還可以提高讀者滿意度,提升服務(wù)水平,必要時(shí)也是跟數(shù)據(jù)庫商談判、維護(hù)自身權(quán)益的有效工具。
參考文獻(xiàn)
[1] 葉蘭.電子資源管理系統(tǒng)實(shí)施與應(yīng)用研究[J].圖書情報(bào)工作,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] 史克紅.圖書館數(shù)字資源訪問監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].圖書館理論與實(shí)踐,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] 陳濤.網(wǎng)絡(luò)服務(wù)性能監(jiān)測系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),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] 龍凈林.評價(jià)與發(fā)揮高校數(shù)字圖書館數(shù)字資源服務(wù)能力研究[J].圖書館理論與實(shí)踐,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ì)林.數(shù)字圖書館網(wǎng)絡(luò)服務(wù)的監(jiān)測[J].大學(xué)圖書館學(xué)報(bào),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的網(wǎng)絡(luò)服務(wù)監(jiān)控報(bào)警系統(tǒng)的研究[J].電腦編程技巧與維護(hù),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] 彭曉慶.高校圖書館電子資源服務(wù)監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代圖書情報(bào)技術(shù),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].中華醫(yī)學(xué)圖書情報(bào)雜志,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] 朱玉強(qiáng).圖書館電子資源可否瀏覽及下載監(jiān)測程序設(shè)計(jì)[J].現(xiàn)代圖書情報(bào)技術(shù),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] 張昕,孫江輝.輿情監(jiān)測系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2015,38(11):98?102.
ZHANG Xin, SUN Jianghui. Design of public opinion monitoring system [J]. Modern electronics technique, 2015, 38(11): 98?102.