且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

【静态化平台】☞( 一)网页静态化服务

更新时间:2022-08-15 16:00:48

一、应用场景

当我们需要对网页做以下操作时,可以使用本平台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

接口说明:打开网页自动截图,多屏会自动下拉到最底端。

接口地址:GET http://xxx

必须参数 1:fetchUrl (需要截图的网页 , https://g.taobao.com

返回结果:图片在线地址

3.模拟操作网页

接口说明:模拟浏览器操作,例如自动登录打卡等。。

接口地址:GET http://xxx

必须参数 1:js脚本

返回结果:操作log