搜尋引擎頁面分析中的 javascript 處理

來源:互聯網
上載者:User
javascript|搜尋引擎|頁面

  在製作搜尋引擎的時候、或者做頁面分析及資料提取的時候,經常面臨頁面中存在許多javascript,而頁面內容,相當一部分寫入到了這些js指令碼的命令中,而導致正常的DOM分析失敗,無法提取所需的資訊。 當然,如果這個頁面模板確定,針對這個頁面製作資訊提模數板也不很難,每個頁面人工的分析出需要提取的資訊的位置,然後製作模板。可是對於general的網頁搜尋的話,這就不大現實了。正巧前兩天和朋友討論到這個問題,有些想法。在這裡,提供兩個思路,供大家參考。 1、做一個簡化的 javascript 解譯器,執行指令碼片段 做一個完整的 javascript 解譯器是比較難得,但是做一個簡化的 javascript 解譯器則很容易。我們不需要那些複雜的庫,我們只將基本的 javascript 文法實現,並且將涉及文字輸出的函數部分實現就可以了。 這樣做的目的並不是要真正的完整執行這個javascript,而是將指令碼中的字串,按照其程式邏輯進行組合,最後輸出這個指令碼的完整輸出。這樣自然不全面,肯定由於很多功能沒實現,導致輸出的字串和真實的輸出不完全一樣。但是,如果不出意外,

  在製作搜尋引擎的時候、或者做頁面分析及資料提取的時候,經常面臨頁面中存在許多javascript,這些javascript 比較煩人,因為有相當部分頁面內容寫入到了這些js指令碼的命令中,而導致正常的DOM分析看不到這些文字,而使其中的文字資料提取失敗。

  當然,如果這個頁面模板確定,針對這個特定的頁面製作資訊提模數板也不很難,每個頁面人工的分析出需要提取的資訊的位置,然後製作模板。可是對於general的網頁搜尋的話,這就不大現實了。正巧前兩天和朋友討論到這個問題,有些想法。在這裡,提供兩個思路,供大家參考。

  1、做一個簡化的 javascript 解譯器,執行指令碼片段

  做一個完整的 javascript 解譯器是比較難得,但是做一個簡化的 javascript 解譯器則很容易。我們不需要那些複雜的庫,我們只將基本的 javascript 文法實現,並且將涉及文字輸出的函數部分實現就可以了。

  這樣做的目的並不是要真正的完整執行這個javascript,而是將指令碼中的字串,按照其程式邏輯進行組合,最後輸出這個指令碼的完整輸出。這樣自然不全面,肯定由於很多功能沒實現,導致輸出的字串和真實的輸出不完全一樣。但是,如果不出意外,應該不會產生太多的遺漏。因為所有的字串輸出部分我們都實現了,那麼完全可以將這些字串按照其將要輸出的邏輯組合在一起。

  對於根據動態條件做動態事情的問題,如果這些條件無法確定,比如根據瀏覽器類型或者什麼的。完全可以將兩個分支的結果都輸出。當然,我們不應該將這兩塊文字組合,中間應該有我們理解的分割符。

  這樣做得好處是高效能。這個解譯器可以做得很小巧,由於並非完整執行js,所以效能也較之迅速一些。缺點是由於是簡化的解譯器,因此和真實的結果會有差異。但是一般來說,資訊只會多而不會少,(因為同時輸出了不同分支的結果),所以,對於搜尋引擎的頁面分析來說,差不多是夠用了。

  2、用HTML渲染引擎完整的解析頁面,最後從顯示結果中取資料

  採用Gecko (Firefox) 或者Trident (mshtml.dll) (IE) 這些用於瀏覽器的 HTML 渲染引擎來對頁面進行完整的解析和渲染。最後對這些引擎的解析結果進行分析。

  這樣做得好處是和顯示結果最接近,因為他們是頁面的真實解析結果。但是缺點是效能相對較差,因為是對頁面的所有元素的完整解析,所以做了很多與提取文字資訊無用的勞動,如果分析大資料量的頁面的時候,需要權衡一下。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。