關於搜尋引擎頁面分析中的 javascript 處理的2個思路

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

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

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

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

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

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

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

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

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

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

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.