基于PhantomJS的动态爬虫引擎
栏目: JavaScript · 发布时间: 5年前
内容简介:之前学习爬虫的时候一直了解、学习的是基于PhantomJS的,虽然Chrome的headless更加优秀、比PhantomJS更快、占用内存更少,而且还有个强大的爸爸。但是也不能把之前的学的给荒废了,先实践下再说,况且这种东西大部分应该是都是互通的。爬虫主要需要具备的基本功能:
之前学习爬虫的时候一直了解、学习的是基于PhantomJS的,虽然Chrome的headless更加优秀、比PhantomJS更快、占用内存更少,而且还有个强大的爸爸。但是也不能把之前的学的给荒废了,先实践下再说,况且这种东西大部分应该是都是互通的。
PhantomJS 是无界面的 Webkit 解析器,提供了 JavaScript API 。由于去除了可视化界面,速度比一般 Webkit 浏览器要快很多。同时提供了很多监控和事件接口,可以方便的操作 DOM 节点,模拟用户操作等。
1. 爬虫功能
爬虫主要需要具备的基本功能:
- javascript动态解析能力
- hook所有的网络请求
- 静态页面链接、表单自动分析能力
- 自动交互能力
1.1 静态页面链接和表单自动分析
phantomjs提供 page.evaluate
,这个方法会创建一个“沙盒”来解析javascript。所以,我们可以在沙盒中执行javascript代码,以此获得静态页面链接和表单
1.2 javascript动态解析
phantomjs在打开url的时候就会自动使用自己的webkit内核去执行对应的javascript代码,从而可以实现js动态解析
1.3 hook所有的网络请求
phantomjs使用 page.onResourceRequested
方法来hook所有的网络请求,所以可以在这个函数里面截获ajax请求,获取url和对应的参数
1.4 自动交互
爬虫的自动交互能力就是需要获取页面所有事件,并想办法触发事件,最后获取事件触发的结果。
页面中的事件一般分两种:
- 内联事件:比如,on开头的事件onxxx、
javascript:xxx
- 绑定事件:比如,
document.addEventListener
、jQuery
中的$('dom').xxx
自动交互事件即用户交互事件,而用户操作的本质,实际上是触发了绑定在DOM节点的事件。所以自动触发问题,可以简化为触发节点事件。
分解下自动触发事件的三个步骤,逐步实现
1、获取事件 2、触发事件 3、获取事件触发结果
2.1 内敛事件
获取内敛事件:遍历节点,获取所有节点内的 onxx
属性和 javascript:
属性值
触发内敛事件:调用eval执行所有的onxxxx属性和 javascript:
属性的值
2.2 绑定事件:
获取绑定事件:JavaScript中绑定事件,都会调用a ddEventListener
函数,所以我们可以用hook addEventListener
的办法来获取绑定事件:onInitialized
触发绑定事件:JavaScript中提供了dispatchEvent函数,可以触发指定DOM节点的指定事件
2.3 获取事件触发结果
等待页面加载完之后,需要获取所有的 <a>
、 <iframe>
、 <form>
等标签,开启页面DOM节点监听,并且触发所有的事件。
获取form表单属性和值 获取a标签的href值 获取link标签的href值 获取area标签的href值 获取img标签的src值 获取embed标签的src值 获取video标签的src值 获取audio标签的src值
2. 代码实现
具体代码如下:
注意项:
Content-Type
3. 实例测试
这里以 demo.aisec.cn
为测试站点。
看下效果:
从图中看出获取的的链接有:
静态标签: http://demo.aisec.cn/demo/aisec/html_link.php?id=2 JS解析 http://demo.aisec.cn/demo/aisec/js_link.php?id=2&msg=abc Form表单: http://demo.aisec.cn/demo/aisec/post_link.php Ajax请求: http://demo.aisec.cn/demo/aisec/ajax_link.php?id=1&t=010451811132952571 自动交互: http://demo.aisec.cn/demo/aisec/click_link.php?id=2
后面还要做的太多了。。。慢慢来吧。 ️
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Tomcat和搜索引擎网络爬虫的攻防
- golang[59]-分布式爬虫-jsonrpc抽离存储数据引擎
- 谷歌开源robots.txt 欲引领搜索引擎爬虫的行业标准
- 爬虫需谨慎,那些你不知道的爬虫与反爬虫套路!
- 反爬虫之字体反爬虫
- 反爬虫之字体反爬虫
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Erlang趣学指南
邓辉、孙鸣 / 人民邮电出版社 / 2016-9-7 / 79.00元
这是一本讲解Erlang编程语言的入门指南,内容通俗易懂,插图生动幽默,示例短小清晰,结构安排合理。书中从Erlang的基础知识讲起,融汇所有的基本概念和语法。内容涉及模块、函数、类型、递归、错误和异常、常用数据结构、并行编程、多处理、OTP、事件处理,以及所有Erlang的重要特性和强大功能。一起来看看 《Erlang趣学指南》 这本书的介绍吧!