【原創(chuàng)】jsoup爬蟲-----把js的json對象過濾并轉(zhuǎn)成java的json對象

? ? ? ? ? 如果使用Jsoup爬蟲去爬取網(wǎng)頁代碼,那么可能會遇到一個問題是:html元素如果是使用js生成出來的,那么難以去獲取到解析規(guī)則。

如圖:


? ? ? ? 我從網(wǎng)頁上隨便找了一段js文件,大體的語法就是通過js生成對應的表格列。在js的語法里,columns就是一個JsonArray。但是對于java來說。json是不允許有方法出現(xiàn),比如圖中的function,或則是compareFn以及test方法。那么我們?nèi)绾尾拍茼樌馕鲞@個js文件成為一個java的json對象呢?

? ? ? ? 思路:js或則java中的json,擁有一個不變的共性是:有多少個“{”就必定有對應數(shù)量的“}”。

? ? ? ? 解析規(guī)則:從'{'括號找到對應的'}'括號的過程:任意一個左括號開始,查找下一個右括號,如果查找到下一個右括號之前又經(jīng)歷了N個左括號,那么必須繼續(xù)往下找到第N個右,如果在找第N個右時又經(jīng)歷了M個左括號。那么必須繼續(xù)往下找。直到找到對應的 : 左括號數(shù)目 = 右括號數(shù)+1? ?,則該位置就是左括號匹配的右括號。匹配成功則可以根據(jù)字符串index截取出來,然后可以順利的把columns字符串分開成2個js的json對象。如圖:


? ? ? ?如果我們的目標是單純的獲取field字段,我們可以通過json的第二個共性:屬性之間用‘,’號分割。如此,再使用關(guān)鍵字function去判斷屬性里面是否包含,如果包含就去掉該屬性。這樣我們就能把一個復雜的js的json對象轉(zhuǎn)成一個只包含我們想要識別信息的java的json對象:


? ? ? ? ? ? ? ?以下是部分核心邏輯截圖展示:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容