趙春霞(青島職業(yè)技術(shù)學(xué)院,青島,255666)
網(wǎng)站采集器技術(shù)分析與設(shè)計(jì)
趙春霞
(青島職業(yè)技術(shù)學(xué)院,青島,255666)
近年來,隨著國內(nèi)大數(shù)據(jù)戰(zhàn)略越來越清晰,對網(wǎng)站數(shù)據(jù)抓取和信息采集技術(shù)要求越來越高,然而信息采集技術(shù)相對比較薄弱,筆者通過對網(wǎng)站采集器的技術(shù)進(jìn)行分析,并提出了一些可實(shí)施的規(guī)則和措施,用于技術(shù)指導(dǎo)。
網(wǎng)站采集器;規(guī)則 ;正則表達(dá)式
網(wǎng)站采集,就是從網(wǎng)站頁面中自動抽取指定的數(shù)據(jù),完成數(shù)據(jù)采集的工作,需要配置一些規(guī)則來指導(dǎo)計(jì)算機(jī)的操作,這個規(guī)則的組合稱之為“采集任務(wù)”,采集任務(wù)中至少要包括網(wǎng)頁地址、網(wǎng)頁的拷貝數(shù)據(jù)的規(guī)則。
2.1 單個網(wǎng)頁采集數(shù)據(jù)的規(guī)則
2.1.1 按照字符串獲取的規(guī)則來指導(dǎo)計(jì)算機(jī)采集數(shù)據(jù),一個網(wǎng)頁是由瀏覽器網(wǎng)頁源碼進(jìn)行解析后展示的結(jié)果,任何瀏覽器都可查看網(wǎng)頁源碼,打開網(wǎng)頁源碼后,在網(wǎng)頁源碼中通常(注意:是通常)都可以找到網(wǎng)頁顯示的內(nèi)容,自然文章標(biāo)題也可以找到,找到文章標(biāo)題后,告訴計(jì)算機(jī)要采集這個標(biāo)題數(shù)據(jù),規(guī)則就是:從哪個字符開始獲取到那個字符結(jié)束,例如:“”這樣一個字符串,要獲取“今天的天氣很好啊”,就是告訴計(jì)算機(jī)從“”結(jié)束,將中間的字符采集下來,計(jì)算機(jī)就會對這個字符串進(jìn)行識別,并按照定制的規(guī)則將所需要的數(shù)據(jù)獲取。采集數(shù)據(jù),就是要配置這樣的規(guī)則來指導(dǎo)計(jì)算機(jī)將網(wǎng)頁數(shù)據(jù)逐一采集下來;(2)第二種方式來指導(dǎo)計(jì)算機(jī)采集數(shù)據(jù):通常情況網(wǎng)頁的源碼是一個XML文檔,網(wǎng)頁源碼是一個結(jié)構(gòu)化的、具有標(biāo)記識別的一種文檔。這樣,可以通過一種方式來標(biāo)記需要采集的數(shù)據(jù),讓計(jì)算機(jī)自動尋找并獲取數(shù)據(jù),這種方式也就是常見的可視化采集??梢暬杉暮诵氖荴Path信息,XPath是XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。用XPath來制定文檔某個位置的數(shù)據(jù),讓計(jì)算機(jī)來采集,這樣也實(shí)現(xiàn)了指導(dǎo)計(jì)算機(jī)采集數(shù)據(jù)的需求;
2.1.2 采集N個有規(guī)則的頁面
要采集N個有規(guī)則的頁面,需要找到這N多個網(wǎng)頁的規(guī)則,用一種規(guī)則來讓計(jì)算機(jī)自動解析完成N多個網(wǎng)頁的構(gòu)成。這種解析可以由一下幾種方式:
按照一個可識別的規(guī)則解析,譬如:數(shù)字遞增,字母遞增或日期遞增,舉個例子:http://www.******.com/article.aspx?id=1001,這是一個文章的Url,比較容易理解,id是url提交的參數(shù),1001是一個參數(shù)值,代表一篇文章,那么就可以通過數(shù)字遞增的形式來替代它,http://www.******.com/article.aspx?id= {Num:1001,1999,1},這 樣 就 完 成了998篇文章url的構(gòu)成,系統(tǒng)會自動將url解析出來,{Num:1001,1999,1}是一個數(shù)字遞增的參數(shù),從1001開始遞增,每次遞增加1,直至1999結(jié)束??梢栽诓杉蝿?wù)中提供了很多這樣的參數(shù)來幫助用戶完成N多url的構(gòu)成;
有些Url并不一定可以通過一定可識別的規(guī)則來構(gòu)成,那該如何?譬如:http://www.******.com/s.aspx?area=北京,這是一個帶入了地區(qū)參數(shù)的Url,全國有眾多的城市,總不能一個一個輸入。針對這種Url,可以用字典參數(shù),首先將全國城市數(shù)據(jù)獲取,建立在字典中,然后通過配置url完成這種貌似無規(guī)則url的構(gòu)成,http://www.******.com/s.aspx?area= {Dict:城市},這個參數(shù)表示了使用字典:城市的值,這樣也可以完成成批Url的構(gòu)成。
按照網(wǎng)站的數(shù)據(jù)組織結(jié)構(gòu)來成批配置Url,瀏覽一個網(wǎng)站通常是從網(wǎng)站的首頁進(jìn)入,而網(wǎng)站為了更好的讓用戶找到期望看到的信息,都會按照一定的分類結(jié)構(gòu)對數(shù)據(jù)進(jìn)行組織,并提供一個列表對數(shù)據(jù)進(jìn)行展示,分類一般都是網(wǎng)站的頻道,列表通常是一個頻道下的列表(數(shù)據(jù)索引)頁面,由于數(shù)據(jù)眾多,這個頁面可能會有翻頁,也可能還會進(jìn)行子類的劃分。所以,可以通過這個方式進(jìn)行成批Url的配置。這個配置的過程,需要在采集任務(wù)中需要配置導(dǎo)航規(guī)則、翻頁規(guī)則。
導(dǎo)航規(guī)則:導(dǎo)航就是從一個頁面進(jìn)入另外一個頁面的操作,網(wǎng)站的首頁就是一個導(dǎo)航頁,首頁會有很多的欄目入口,點(diǎn)擊就可以進(jìn)入各個欄目,導(dǎo)航就是讓計(jì)算機(jī)自動進(jìn)入每個欄目,導(dǎo)航可以有很多,代表的就是從一個導(dǎo)航頁進(jìn)入一個欄目,再進(jìn)入一個子欄目,再進(jìn)入一個詳細(xì)的頁面,如果詳細(xì)頁還需要提取更多的數(shù)據(jù),那么還需要導(dǎo)航進(jìn)入,就好像在瀏覽數(shù)據(jù)一樣,從一個頁面進(jìn)入另一個頁面,再進(jìn)入一個頁面,每個導(dǎo)航頁都帶有了大量的需要采集數(shù)據(jù)的url,系統(tǒng)會自動獲取這些url來實(shí)現(xiàn)成批數(shù)據(jù)的采集;
翻頁規(guī)則:當(dāng)數(shù)據(jù)量大的時候,網(wǎng)站會提供翻頁操作,很典型的就是新聞列表頁,會有很多新聞,第一頁一直到第N頁,所以,為了可以獲取第1頁以后的數(shù)據(jù),還需要告訴計(jì)算機(jī)如何翻頁,這個就是翻頁規(guī)則,讓計(jì)算機(jī)就像瀏覽網(wǎng)頁一樣,一頁一頁翻,直至最后一頁,將數(shù)據(jù)獲取。
在實(shí)際的數(shù)據(jù)采集過程中,采集的數(shù)據(jù)質(zhì)量可能并不一定可以滿足的要求,譬如:帶有了很多的無用網(wǎng)頁信息,也可能在用規(guī)則匹配的時候會很難找到準(zhǔn)確的起始采集的字符和終止采集的字符??山梃b以下采集數(shù)據(jù)規(guī)則匹配的一些技巧,和數(shù)據(jù)加工的操作,從而獲取高質(zhì)量的數(shù)據(jù)。
根據(jù)用戶規(guī)則采集數(shù)據(jù)的核心是正則表達(dá)式匹配,正則表達(dá)式是指一個用來描述或者匹配一系列符合某個句法規(guī)則的字符串的單個字符串。正則在匹配(或者可以說是獲?。┳址畷r是非常方便的,但其又很不容易理解,所以需要采集器使用界面化的配置方式讓用戶輸入獲取字符的起始位置和終止位置來自動構(gòu)成一個正則表達(dá)式,進(jìn)行數(shù)據(jù)的獲取。不同的采集器核心對正則匹配的規(guī)則構(gòu)成是不一樣的。因此可以采用一些面向正則良好的信息來配置規(guī)則,甚至可以用正則通配符來提升采集數(shù)據(jù)的準(zhǔn)確度,更甚可以自定義正則進(jìn)行數(shù)據(jù)的匹配(一般都是高級用戶來使用)。
采集數(shù)據(jù)加工是一項(xiàng)非常有必要且很重要的功能,采集的數(shù)據(jù)并不一定是想要的最終數(shù)據(jù),例如采集的文章正文,通常都會帶有在很多情況下,在瀏覽網(wǎng)頁時可以看到數(shù)據(jù),但查看源碼時卻無法找到需要采集的數(shù)據(jù)。這種情況通常是網(wǎng)站采用了ajax 或iframe技術(shù),如果你使用的事firefox瀏覽器,可以在頁面鼠標(biāo)右擊需要采集的數(shù)據(jù),會彈出一個菜單,在菜單項(xiàng)中找是否有“此框架”的菜單項(xiàng),如果有,那就是iframe,如果沒有就是ajax。Ajax一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。使用js請求xml數(shù)據(jù)并展示到網(wǎng)頁中,這個請求的數(shù)據(jù)是在網(wǎng)頁中無法查詢到的。遇到這種情況可以使用http嗅探器來查找js請求數(shù)據(jù)的url,這個網(wǎng)址就是需要采集數(shù)據(jù)的url。
可能還會遇到另外一種情況,url配置正確,采集的數(shù)據(jù)也可以通過網(wǎng)頁源碼看到,但實(shí)際采集的時候,卻無法采集到數(shù)據(jù)或出現(xiàn)了錯誤。這種情況有可能需要配置兩個信息:cookie 和user-agent;部分網(wǎng)站即便是匿名訪問系統(tǒng)也會分配一個cookie信息用戶身份識別,User Agent中文名為用戶代理,使得服務(wù)器能夠識別客戶使用的操作系統(tǒng)及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。一些網(wǎng)站常常通過判斷 User Agent 來給不同的操作系統(tǒng)、不同的瀏覽器發(fā)送不同的頁面,因此可能造成某些頁面無法在某個瀏覽器中正常顯示,無論是cookie還是user-agent都可以通過網(wǎng)絡(luò)嗅探器來進(jìn)行查看獲取信息。
現(xiàn)在很多行業(yè)網(wǎng)站都是用戶會員授權(quán)的,所以需要采集的數(shù)據(jù)也是需要會員身份的,會員必須登錄后才能看到這些數(shù)據(jù),在進(jìn)行數(shù)據(jù)采集時,也是需要進(jìn)行登錄身份驗(yàn)證的,在進(jìn)行登錄采集時,通常系統(tǒng)都是記錄cookie信息,在請求網(wǎng)頁時一并發(fā)送,讓網(wǎng)站進(jìn)行身份驗(yàn)證,從而獲取數(shù)據(jù)。所以,在采集登錄網(wǎng)頁時,要記錄登錄的cookie信息。
趙春霞,性別:女(1975.2-),漢族,碩士,副教授,籍貫:山西省平陸縣,研究方向:軟件開發(fā)。
Technical analysis and design of website collector
Zhao Chunxia
(Qingdao Technical College,Qingdao,255666)
In recent years,as domestic big data strategy has become increasingly clear,crawling the site data and information gathering techniques have been demanded increasingly,however,information gathering technology is relatively weak,the author analysised the site collector techniques,and made a number of rules and measures that can be implemented for technical guidance.
the site collector;rule;Regular Expressions
院級課題項(xiàng)目:基于開源Web CMS的校園網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)(課題編號:11-A-5)