如果使用Jsoup爬虫去爬取网页代码,那么可能会遇到一个问题是:html元素如果是使用js生成出来的,那么难以去获取到解析规则。
如图:
我从网页上随便找了一段js文件,大体的语法就是通过js生成对应的表格列。在js的语法里,columns就是一个JsonArray。但是对于java来说。json是不允许有方法出现,比如图中的function,或则是compareFn以及test方法。那么我们如何才能顺利解析这个js文件成为一个java的json对象呢?
思路:js或则java中的json,拥有一个不变的共性是:有多少个“{”就必定有对应数量的“}”。
解析规则:从'{'括号找到对应的'}'括号的过程:任意一个左括号开始,查找下一个右括号,如果查找到下一个右括号之前又经历了N个左括号,那么必须继续往下找到第N个右,如果在找第N个右时又经历了M个左括号。那么必须继续往下找。直到找到对应的 : 左括号数目 = 右括号数+1 ,则该位置就是左括号匹配的右括号。匹配成功则可以根据字符串index截取出来,然后可以顺利的把columns字符串分开成2个js的json对象。如图:
如果我们的目标是单纯的获取field字段,我们可以通过json的第二个共性:属性之间用‘,’号分割。如此,再使用关键字function去判断属性里面是否包含,如果包含就去掉该属性。这样我们就能把一个复杂的js的json对象转成一个只包含我们想要识别信息的java的json对象:
以下是部分核心逻辑截图展示: