基于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 自动交互

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

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

  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

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


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

查看所有标签

猜你喜欢:

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

Erlang趣学指南

Erlang趣学指南

邓辉、孙鸣 / 人民邮电出版社 / 2016-9-7 / 79.00元

这是一本讲解Erlang编程语言的入门指南,内容通俗易懂,插图生动幽默,示例短小清晰,结构安排合理。书中从Erlang的基础知识讲起,融汇所有的基本概念和语法。内容涉及模块、函数、类型、递归、错误和异常、常用数据结构、并行编程、多处理、OTP、事件处理,以及所有Erlang的重要特性和强大功能。一起来看看 《Erlang趣学指南》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具