【靜態化平臺】☞(一)網頁靜態化服務

shiningshang發表於2016-09-12

一、應用場景

當我們需要對網頁做以下操作時,可以使用本平臺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地址。

screenshot

三、介面介紹

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


相關文章