一、应用场景
当我们需要对网页做以下操作时,可以使用本平台O(∩_∩)O~
1.抓取网页源代码,包括网页js动态渲染之后的内容,100%还原网页的所见即所得
在抓取的网页源代码的时候,遇到ajax异步渲染到dom节点,这样读取网页源码就会缺失这些异步渲染的数据。传统做法单独请求ajax的http请求获取json数据,但是如果这些json数据在页面上通过js做了改变,最终呈现到页面的数据不是你想要的,还是不能解决我们的问题。
2.抓取下拉后加载的数据
在移动端浏览网页或app时候,经常会遇到下拉加载数据。每当网页的高度到底的时候,会自动触发ajax加载新数据,拼接到最后如此重复。如果我们需要抓取这种下拉后完整的网页,传统做法是发送许多ajax来请求下拉数据,然后再手动的拼接这些数据还原网页。这么做涉及到大量的代码逻辑,太慢。。。
3.网页截图
批量对网页内容截图,生成网页快照图片。
4.模拟操作网页
对第三方网站自动点击,可以完全模拟真实用户操作。
5.自动采集app数据
自动登陆后,采集app的数据。这里只是针对h5的app。native的不能自动,需要写代码。
6.在线清洗数据,并将清洗后的数据直接同步MaxCompute。
用户在线编辑自定义js脚本,处理抓取到的数据,将处理后的结果同步MaxCompute。可以使用cheerio(和jquery用法基本一致)来获取dom节点数据。
二、实现原理
1.nodejs数据接入层接受到请求后将数据缓存到redis集群中,redis采用队列存储。采用redis缓存主要解决单点问题。
2.nodejs定时从redis队列中拉取数据交给phantomjs进程池处理,每次拉取的数量不超过phantomjs进程池设置的最大缓存数目前是500。最多并发启动18个phantomjs进程(cpu上限),保证phantomjs进程池中始终有任务处于等待状态,减少创建进程的开销。
3.phantomjs抓取到的数据放到redis缓存一份,1小时有效期。将结果数据发送用户提供的callbackUrl地址。
三、接口介绍
1.网页静态化api
接口说明:需要静态化的地址,调用此接口可以将对应的url内容静态化。返回结果通过callback的方式主动调用callback地址。(数据缓存1小时有效,不必多次静态化相同的url)
接口地址:GET http://xxx
必须参数 1:fetchUrl (需要静态化的url , https://g.taobao.com)
必须参数 2:callbackUrl (回调接收,静态化过程比较慢,因此采用异步接口,post方式发送到callbackUrl)
返回结果:html源代码
2.网页截图api
接口说明:打开网页自动截图,多屏会自动下拉到最底端。
必须参数 1:fetchUrl (需要截图的网页 , https://g.taobao.com)
返回结果:图片在线地址
3.模拟操作网页
接口说明:模拟浏览器操作,例如自动登录打卡等。。