基于PhantomJS的动态爬虫引擎

栏目: JavaScript · 发布时间: 6年前

内容简介:之前学习爬虫的时候一直了解、学习的是基于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 自动交互

爬虫的自动交互能力就是需要获取页面所有事件,并想办法触发事件,最后获取事件触发的结果。

页面中的事件一般分两种:

  1. 内联事件:比如,on开头的事件onxxx、 javascript:xxx
  2. 绑定事件:比如, document.addEventListenerjQuery 中的 $('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. 代码实现

具体代码如下:

基于PhantomJS的动态爬虫引擎

注意项:

Content-Type

3. 实例测试

这里以 demo.aisec.cn 为测试站点。

看下效果:

基于PhantomJS的动态爬虫引擎

从图中看出获取的的链接有:

静态标签: 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

后面还要做的太多了。。。慢慢来吧。 ️


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Spring Cloud微服务实战

Spring Cloud微服务实战

翟永超 / 电子工业出版社 / 2017-5 / 89

《Spring Cloud微服务实战》从时下流行的微服务架构概念出发,详细介绍了Spring Cloud针对微服务架构中几大核心要素的解决方案和基础组件。对于各个组件的介绍,《Spring Cloud微服务实战》主要以示例与源码结合的方式来帮助读者更好地理解这些组件的使用方法以及运行原理。同时,在介绍的过程中,还包含了作者在实践中所遇到的一些问题和解决思路,可供读者在实践中作为参考。 《Sp......一起来看看 《Spring Cloud微服务实战》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具