搜索引擎頁面分析中的 javascript 處理——在制作搜索引擎的時候、或者做頁面分析及數(shù)據(jù)提取的時候,經(jīng)常面臨頁面中存在許多javascript,而頁面內(nèi)容,相當(dāng)一部分寫入到了這些js腳本的命令中,而導(dǎo)致正常的DOM分析失敗,無法提取所需的信息。
在制作搜索引擎的時候、或者做頁面分析及數(shù)據(jù)提取的時候,經(jīng)常面臨頁面中存在許多javascript,而頁面內(nèi)容,相當(dāng)一部分寫入到了這些js腳本的命令中,而導(dǎo)致正常的DOM分析失敗,無法提取所需的信息。當(dāng)然,如果這個頁面模板確定,針對這個頁面制作信息提取模板也不很難,每個頁面人工的分析出需要提取的信息的位置,然后制作模板。可是對于general 的網(wǎng)頁搜索的話,這就不大現(xiàn)實(shí)了。正巧前兩天和朋友討論到這個問題,有些想法。在這里,提供兩個思路,供大家參考。 1、做一個簡化的 javascript 解釋器,執(zhí)行腳本片段 做一個完整的 javascript 解釋器是比較難得,但是做一個簡化的 javascript 解釋器則很容易。我們不需要那些復(fù)雜的庫,我們只將基本的 javascript 語法實(shí)現(xiàn),并且將涉及文字輸出的函數(shù)部分實(shí)現(xiàn)就可以了。這樣做的目的并不是要真正的完整執(zhí)行這個javascript,而是將腳本中的字符串,按照其程序邏輯進(jìn)行組合,最后輸出這個腳本的完整輸出。這樣自然不全面,肯定由于很多功能沒實(shí)現(xiàn),導(dǎo)致輸出的字符串和真實(shí)的輸出不完全一樣。但是,如果不出意外,
在制作搜索引擎的時候、或者做頁面分析及數(shù)據(jù)提取的時候,經(jīng)常面臨頁面中存在許多javascript,這些javascript 比較煩人,因?yàn)橛邢喈?dāng)部分頁面內(nèi)容寫入到了這些js腳本的命令中,而導(dǎo)致正常的DOM分析看不到這些文字,而使其中的文字?jǐn)?shù)據(jù)提取失敗。
當(dāng)然,如果這個頁面模板確定,針對這個特定的頁面制作信息提取模板也不很難,每個頁面人工的分析出需要提取的信息的位置,然后制作模板。可是對于general的網(wǎng)頁搜索的話,這就不大現(xiàn)實(shí)了。正巧前兩天和朋友討論到這個問題,有些想法。在這里,提供兩個思路,供大家參考。
1、做一個簡化的 javascript 解釋器,執(zhí)行腳本片段
做一個完整的 javascript 解釋器是比較難得,但是做一個簡化的 javascript 解釋器則很容易。我們不需要那些復(fù)雜的庫,我們只將基本的 javascript 語法實(shí)現(xiàn),并且將涉及文字輸出的函數(shù)部分實(shí)現(xiàn)就可以了。
這樣做的目的并不是要真正的完整執(zhí)行這個javascript,而是將腳本中的字符串,按照其程序邏輯進(jìn)行組合,最后輸出這個腳本的完整輸出。這樣自然不全面,肯定由于很多功能沒實(shí)現(xiàn),導(dǎo)致輸出的字符串和真實(shí)的輸出不完全一樣。但是,如果不出意外,應(yīng)該不會產(chǎn)生太多的遺漏。因?yàn)樗械淖址敵霾糠治覀兌紝?shí)現(xiàn)了,那么完全可以將這些字符串按照其將要輸出的邏輯組合在一起。
對于根據(jù)動態(tài)條件做動態(tài)的事情的問題,如果這些條件無法確定,比如根據(jù)瀏覽器類型或者什么的。完全可以將兩個分支的結(jié)果都輸出。當(dāng)然,我們不應(yīng)該將這兩塊文字組合,中間應(yīng)該有我們理解的分割符。
這樣做得好處是高性能。這個解釋器可以做得很小巧,由于并非完整執(zhí)行js,所以性能也較之迅速一些。缺點(diǎn)是由于是簡化的解釋器,因此和真實(shí)的結(jié)果會有差異。但是一般來說,信息只會多而不會少,(因?yàn)橥瑫r輸出了不同分支的結(jié)果),所以,對于搜索引擎的頁面分析來說,差不多是夠用了。
2、用HTML渲染引擎完整的解析頁面,最后從顯示結(jié)果中取數(shù)據(jù)
采用Gecko (Firefox) 或者Trident (mshtml.dll) (IE) 這些用于瀏覽器的 HTML 渲染引擎來對頁面進(jìn)行完整的解析和渲染。最后對這些引擎的解析結(jié)果進(jìn)行分析。
這樣做得好處是和顯示結(jié)果最接近,因?yàn)樗麄兪琼撁娴恼鎸?shí)解析結(jié)果。但是缺點(diǎn)是性能相對較差,因?yàn)槭菍撁娴乃性氐耐暾馕觯宰隽撕芏嗯c提取文字信息無用的勞動,如果分析大數(shù)據(jù)量的頁面的時候,需要權(quán)衡一下。
from:
http://sskb.cn/yingxiao/914-search-java.htm