web數據采集核心技術分享系列(二)如何提取信息?字符串?正則?xpath?xslt?自定義?...什么才是王道?


目錄:

web數據采集核心技術分享系列(一)做一個強大的web數據采集系統,你需要什么?

web數據采集核心技術分享系列(二)如何提取信息?字符串?正則?xpath?xslt?自定義?...什么才是王道?

web數據采集核心技術分享系列(三)如何破解驗證碼?圖像分析?特征匹配?人工智能?第三方集成?...哪個最強大?  

 web數據采集核心技術分享系列(四)利用神經網絡實現網頁驗證碼破解

 

應各位熱心看客的要求建了個QQ群:254764602,歡迎大家加群一起討論,互相學習進步。  

加群請輸入暗號“數據采集”,否則不加

 

上篇 web數據采集核心技術分享系列(一)做一個強大的web數據采集系統,你需要什么?  剛發布, 本想休息一下晚上再來寫第二篇,就看見幾位熱心園友給我留言,索性中午不休息了,把第二篇寫出來。

 

不廢話,直入主題,web頁面上的信息之所以難提取,關鍵在於諸多的不確定性,我們列舉一下然后對各種提取方式進行分析看看哪種最合適(注:上篇評論中有位網友說,沒有王道,只有最合適,我覺得有道理,所以我們就看看哪種最合適)。

1.網頁結構經常變化

2.網頁內容變化且非常繁雜

3.各個網站所采取的前端技術千差萬別

4.Html是個松散的技術,各大廠商互不兼容

 。。。。。

 

第一個,結構變化,比如你感興趣的一個數據表,以前在網頁左面現在到了右面,這種主要是位置的變化,或者說你感興趣的數據原來在表格第一行,現在網站在第一行加了廣告,導致你的數據去了第二行,如果使用字符串定位,通過找到數據開始之前的網頁字符串, 找到數據結束的字符串,那么以前開始之前是表頭,現在開始之前是廣告,如果繼續使用之前的配置來抓取,則會把廣告也抓進來,顯然靈活性比較差,當然字符串這種方式好處也顯而易見,就是簡單,當然也許你想要最簡單的,這個就最合適,不過我認為這個不是王道,我們來繼續尋找王道

 

第二個,內容變化且繁雜,一個網頁可能還有幾百條,幾千條數據,也有可能是幾段文字,里面的具體內容每個頁面都不完全一樣,正則表達式是用來在一段文本中匹配一個或多個字符串的,對於匹配有一定格式或者部分內容固定的文本有很好的效果,但是在web數據采集中,卻有很多因素超出了這個范圍,舉例,假設一個表格有10行,其中每行的數據都很相似,你如果只想要提取其中一行的數據,因為正則並沒有能力處理web頁面元素的位置,就是忽略了頁面格式,而是單純依賴文本,所以就很難精確匹配到你想要那一行,很有可能因為文本相似匹配到很多文本,隨着頁面內容的繁雜和相似度提高,正則效果就更差了,看來正則只適合提取文本特征很明顯而且固定的小頁面。

 

第三,第四,其實可以一起來討論,大家都知道,很多網站的內容是html的,也有些shtml的,還有php,asp,jsp, 有些用了js框架,有些用了ajax等等,這導致最終在瀏覽器里面的源文件有很大的差別,加上各大瀏覽器廠商互相不兼容,甚至同一個網頁在同的瀏覽器里面源文件都不同,跟別說顯示效果了。熟悉xslt的人應該知道,xslt內部有xpath,實際上是一種對xml進行轉化的技術,就是說可以從一個xml中提取信息到另一個xml中,這里有兩個關鍵點,一個是xml,xml的優勢在於可以組織包含各種復雜的數據及其內部關系,提取正是我們想要做得事情,有了這兩個,留給我們的事情就剩下如何把網頁轉化為xml,如果這點解決了,我們就完美解決從網頁中提取數據了,有很多大牛嘗試去做這個東西,我在這里提一個我見過最好的,大家如果沒用過可以去查一下,HtmlAgilityPack ,網絡上對這個類庫的好評如潮,似乎可以完美解決問題,但是深入研究其代碼之后你就會發現,問題不在於他的代碼,而在於這件事情本身的可行性,有很多頁面根本不符合規范,就算符合規范也是千奇百怪,最終導致的問題就是想要把網頁,或者說html完美轉化為xml是不可行的,往往轉化出來的xml結構和內容上都和網頁本身不符合,也就是說兩者不能划等號,提取不到信息或者說提取到錯誤的信息就不足為奇了,我在很多次嘗試修改其源碼之后才發現,各種特殊情況是層出不窮的,也是無法完全做好的,記得有一句話說“如果你走在錯誤的路上,奔跑也沒有用”,跟這個一個道理。

 

既然xslt也不是王道,那么其依賴的xpath會不會是呢?從我個人的經驗來看,目前還沒有哪個自定義方案能超越xpath,這點我們從xpath的本質上就能找到原因。

看看百度百科上對xpaht的定義:XPath 是一門在 XML 文檔中查找信息的語言。XPath 用於在 XML 文檔中通過元素和屬性進行導航。 基於前面對xml的理解,我可以擴展一下,xpath是一門在復雜結構化數據中查找信息的語言,看到這句你是不是信心大增呢?網頁正是一個復雜的數據結構,我們要做的事情正是查找信息,網頁也正是由網頁元素和屬性等組成,不過事情並沒有這么簡單就結了,我們找到了正確的路,但是這條路有一個重要的障礙必須解決,看到這里你也知道了,就是我們如何對網頁執行xpath查詢,暫且不說這個東西怎么實現,有多復雜,就可行性而言,這個方案是可行的,我們要做的就是一個針對網頁的xpath引擎,具體的如果要展開講,其實也是涉及到很多方面,可能一個單獨的系列也講不完,探討具體的實現超出了本文的范圍,在此就拋磚引玉,歡迎各位看官批評指正互相交流,xpath是不是王道,你說呢?

 

PS: 因本人能力有限,雖在web數據采集領域奮戰多年,卻也不可能在web數據采集的各個方面都提供最牛逼的解決方案和思路,還請各位看官本着互相交流學習,一起進步成長的態度來批評指正,歡迎留言。  

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM