本文转自蔡老板的公众号,原网址:https://mp.weixin.qq.com/s/NjWXail0y3vdqZJPLgjTfgjavascript
AST从入门到实战系列基础文章索引: AST在线解析网站: 原站点: AST explorer 国内镜像 AST explorercss
答:在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。html
它以树状的形式表现编程语言的语法结构,树上的每一个节点都表示源代码中的一种结构。前端
之因此说语法是“抽象”的,是由于这里的语法并不会表示出真实语法中出现的每一个细节。(摘自百度百科)java
关键词:源代码,树,语法,抽象。node
既然是一棵树,那确定有节点,或者遍历相关的概念。git
答:随着技术的革新,愈来愈多的前端为了保护其网站不被第三方爬取,使用了大量的混淆代码,让爬虫工程师愈来愈难找到其核心参数加密代码。github
有时候定位到加密的地方,面对一大坨乱如麻的代码,心里也是拒绝的。npm
这个时候,但愿有一种工具,尽量的将被混淆的代码进行处理,使其可读性大大增长,使爬虫工程师可以垂手可得的进行定位,抠出其核心的加密代码。编程
AST用在这里,只是一种辅助工具,并不能直接帮你找到核心的代码,仍是得本身去分析,静态分析也好,动态调试也好,目的只有一个。
答:学习《编译原理》能更容易理解AST,不过没学也不要紧。在这里,咱们当它是一个工具,能够将代码进行简化就行。
目前,前端基本都使用的是JavaScript语言,因此你须要有JavaScript语言的基础,这也是作爬虫工程师必备的技能。
这里推荐一个入门的javascript教程,很是适合零基础的小白。
https://wangdoc.com/javascript/index.html
作爬虫的工程师都或多或少的听过Node.js,把它理解为运行在服务端的 JavaScript 就好。有时候抠出来的核心代码比较复杂,没法改写成Python语言,而又须要对相关参数进行加密并返回给Python,这时候Node.js就派上用场了。
在线下载网站:
https://nodejs.org/zh-cn/
这里我的推荐使用长期支持的版本,比较稳定。
而在Node.js下,有关AST的库不少,本人使用的是babel库,其余的库没作了解,babel库简单,功能强大是它的特色。
在下载并安装后Node.js,就能够直接安装 babel库了。
安装命令:
npm install @babel/core --save-dev
注意: 不要全局安装,可能会有没法导入库的状况。
答:有一个在线的解析网站:
https://astexplorer.net/
该网站能够清晰的将源代码解析成AST,能够将多种语言解析成AST,这里咱们须要处理的是JavaScript,所以选择这个就好:
语言选择后,再选择相应的库,这里注意了,在Node.js下安装的是babel库,所以这里选择 @babel/parser ,保持一致。
答:首先要明确的是,你要作什么。好比看到源代码中,有不少相似这样的代码:
var a = "\u0068\u0065\u006c\u006c\u006f\u002c\u0041\u0053\u0054";
这代码看起来,可读性就差了不少,若是不是特别记忆,根本看不出是什么字符。
这个时候,你想把它还原成原本的面目:
var a = "hello,AST";
这样对你来讲,就清晰多了。这时,你的目的就出来了,想要将
"\u0068\u0065\u006c\u006c\u006f\u002c\u0041\u0053\u0054"
替换成:
"hello,AST"
在这里,咱们手动替换就行了。那若是代码中有大量这样的字符串呢?也是一个一个手动替换吗?
因此,聪明的你确定选择用工具来完成这个重复的工做。
目的明确了,如今就是如何编写工具了。
将
var a = "\u0068\u0065\u006c\u006c\u006f\u002c\u0041\u0053\u0054";
放在在线网站进行解析,发现要处理的字符串是一个 StringLiteral 类型的节点:
在使用babel库操做时,只需遍历这个类型的节点,就会处理所有的 StringLiteral节点。
要处理节点,那确定要理解babel库的相关知识。
1.babel库官方文档:
https://babeljs.io/docs/en/
2.babel库github地址:
https://github.com/babel/babel
3.babel库官方插件开发手册:
https://github.com/jamiebuilds/babel-handbook
4.babel库官方插件
https://www.babeljs.cn/docs/plugins
答:我的不是很推荐WebStrom,感受太笨重了,还要购买。这里推荐微软出品的 VS code,轻便好用。
若是不是很想装软件,也能够试试我一直在用的套装:
UltraEdit 编辑器 + Cmder + Node.js
开发完成后,将文件保存为 xxx.js,再在Cmder下输入命令:
node xxx.js