摘要:負(fù)載均衡設(shè)置負(fù)載均衡的目的就是為了多個(gè)服務(wù)器分擔(dān)壓力。修改的配置文件,添加如下內(nèi)容服務(wù)器集群名為代表最少鏈接負(fù)載均衡,去掉此行將使用默認(rèn)的輪詢策略實(shí)現(xiàn)負(fù)載均衡若使用,此方法確保同一服務(wù)器響應(yīng)請求,此方法適合有狀態(tài)的服務(wù)。
輸入下面命令運(yùn)行splash:
docker run -p 8050:8050 scrapinghub/splash
一個(gè)splash的基本實(shí)例:
function main(splash, args) splash:go("http://www.baidu.com") splash:wait(0.5) lcoal title = splash:evaljs("document.title") return {title=title} end
將上面實(shí)例復(fù)制到 localhost:8050 的代碼編輯區(qū)域,并將網(wǎng)址設(shè)為 http://www.baidu.com
點(diǎn)擊Render me!返回 http://www.baidu.com 的title
我們在這里定義的方法名稱為main(),這個(gè)名稱是固定的,Splash會(huì)根據(jù)這個(gè)名字執(zhí)行。
入口及返回值
該方法的返回值既可以是字典形式,也可以是字符串形式,最后都會(huì)轉(zhuǎn)化為Splash HTTP Response。
異步處理
Splash支持異步處理,但是這里沒有顯式指明回調(diào)方法,其回調(diào)實(shí)在Splash內(nèi)部完成的。
示例如下:
function main(splash, args) local example_urls = {"www.baidu.com", "www.taobao.com", "www.zhihu.com"} local urls = args.urls or example_urls local results = {} for index, url in ipairs(urls) do local ok, reason = splash:go("http://" .. url) if ok then splash:wait(2) results[url] = splash:png() end end return results end
上面實(shí)例運(yùn)行結(jié)果為,三個(gè)網(wǎng)站的的截圖。
在腳本內(nèi)調(diào)用的wait()方法類似與sleep()。其參數(shù)為等待的秒數(shù)。
“..”為拼接字符串。
Splash對象屬性args
該屬性可以獲取加載時(shí)配置的參數(shù),比如URL,
如果為GET請求,它還可以獲取GET請求參數(shù);
如果為POST請求,它可以獲取表單提交的數(shù)據(jù)。
Splash也支持使用第二個(gè)參數(shù)直接作為args,例如:
function main(spalsh, args) local url = args.url end
這里第二個(gè)參數(shù)args就相當(dāng)于splash.args屬性,以上代碼等價(jià)于:
function main(spalsh) local url = splash.args.url end
js_enable
這個(gè)屬性是Splash的JavaScript執(zhí)行開關(guān),可以將其配置為true或false來控制是否執(zhí)行JavaScript代碼,默認(rèn)為true.
一般不用設(shè)置此屬性,默認(rèn)開啟。
resource_timeout
顧名思義,此屬性設(shè)置加載的超時(shí)時(shí)間,單位為秒。如果設(shè)置為0或者nil(類似python中的None),代表不檢測超時(shí)。
此屬性用于加載速度較慢的情況,避免給一直等待,超過時(shí)間無響應(yīng),直接拋出異常忽略即可。
image_enable
顧名思義,設(shè)置圖片是否加載,默認(rèn)情況加載。禁用之后可以節(jié)省網(wǎng)絡(luò)流量并提高加載速度。
注意,禁用圖片加載可能會(huì)影響JavaScript渲染。因?yàn)榻脠D片加載后,它的外層DOM節(jié)點(diǎn)的高度會(huì)發(fā)生變化,進(jìn)而影響
DOM節(jié)點(diǎn)的位置。若JavaScript對圖片節(jié)點(diǎn)有操作的話,其執(zhí)行就會(huì)有影響。
初次之外Splash使用了緩存,一開始緩存了圖片,然后禁用了圖片加載。再進(jìn)行加載圖片還會(huì)出現(xiàn),此時(shí)重啟Splash即可
。
plugins_enable
此屬性控制瀏覽器插件(如Flash插件)是否開啟。默認(rèn)false,不開啟。
scroll_position
通過設(shè)置此屬性來控制頁面上下或左右滾動(dòng)。
示例如下:
function main(splash, args) assert(splash:go("https://www.taobao.com")) splash.scroll_position = {y=400} return {png = splash:png()} end
這樣我們可以控制頁面向下滾動(dòng)400像素。
Splash對象方法go()
該方法用來請求某個(gè)鏈接,也可以模擬GET和POST請求,同時(shí)支持傳入請求頭、表單等數(shù)據(jù),其用法如下:
ok, reason = splash:go{url, baseurl=nil, http_method="GET", body=nil, formdata=nil}
其參數(shù)說明如下:
url:請求的URL。
baseurl:可選參數(shù),默認(rèn)為空,表示資源加載相對路徑。
headers:可選參數(shù),默認(rèn)為空,表示請求頭。
http_method:可選參數(shù),默認(rèn)為GET,同時(shí)支持POST。
body:可選參數(shù),默認(rèn)為空,發(fā)POST請求時(shí)的表單數(shù)據(jù),使用的Content-type為application/json。
formdata:可選參數(shù),默認(rèn)為空,POST請求時(shí)的表單數(shù)據(jù),使用的Content-type為application/x-www-form-urlencoded
該方法的返回結(jié)果是結(jié)果ok和原因reason的組合,如果ok為空,代表網(wǎng)頁加載出現(xiàn)了錯(cuò)誤,此時(shí)reason變量包含了錯(cuò)誤的原因,否則證明頁面加載成功。
示例如下:
function main(splash, args) local ok, reason = splash:go{"http://httpbin.org/post", http_method="POST", body="name=Germy"} if ok then return splash:html() end end
wait()
此方法可以控制頁面等待時(shí)間使用方法如下:
ok, reason = splash:wait(time, cancel_on_redirect=false, cancel_on_error=true)
參數(shù)說明如下:
time:等待的秒數(shù)。
cancel_on_redirect:可選參數(shù)默認(rèn)為false,表示如果發(fā)生重定向就停止等待,并返回重定向的結(jié)果。
cancel_on_error:可選參數(shù),默認(rèn)為false,表示如果發(fā)生了加載錯(cuò)誤,就停止等待。
返回結(jié)果也是ok和reason的組合。
jsfunc()
此方法可以直接調(diào)用JavaScript定義的方法,但是所調(diào)用的方法需要用雙中括號包圍,這相當(dāng)于實(shí)現(xiàn)了JavaScript方法到Lua腳本的轉(zhuǎn)換。
evaljs()
此方法可以執(zhí)行JavaScript代碼并返回最后一條JavaScript語句的返回結(jié)果,使用方法如下:
result = splash:evaljs(js)
runjs()
此方法可以執(zhí)行JavaScript代碼,它與evaljs()的功能類似,但是更偏向于執(zhí)行某些動(dòng)作或聲明某些方法。
autoload()
此方法可以設(shè)置每個(gè)頁面訪問時(shí)自動(dòng)加載的對象,使用發(fā)放如下:
ok, reason = splash:autoload{source_or_url, source=nil, url=nil}
參數(shù)說明如下:
source_or_url:JavaScript代碼或者JavaScript庫鏈接。
source:JavaScript代碼
url:JavaScript庫鏈接
此方法只負(fù)責(zé)加載JavaScript代碼或庫,不執(zhí)行任何操作。執(zhí)行操作的話,需要調(diào)用evaljs()或runjs()方法。
call_later()
此方法可以通過設(shè)置定時(shí)任務(wù)和延遲時(shí)間來實(shí)現(xiàn)任務(wù)延時(shí)執(zhí)行,并且可以在執(zhí)行前通過cancel()方法重新執(zhí)行定時(shí)任務(wù)。
示例如下:
function main(splash, args) local snapshots = {} local timer = splash:call_later(function() snapshots["a"] = splash:png() splash:wait(1.0) snapshots["b"] = splash:png() end, 0.2) splash:go("https://www.taobao.com") splash:wait(3.0) return snapshots end
http_get()
此方法可以模擬發(fā)送HTTP的GET請求,使用方法如下:
response = splash:http_get{url, headers=nil, follow_redirects=true}
參數(shù)說明如下:
url:請求URL
headers:可選參數(shù),默認(rèn)為空,請求頭。
follow_redirects:可選參數(shù),表示是啟動(dòng)自動(dòng)重定向,默認(rèn)為true。
http_post()
此方法用來模擬發(fā)送POST請求,使用方法如下:
response = splash:http_post{url, headers=nil, follow_redirects=true, body=nil}
參數(shù)說明如下:
url:請求URL。
headers:可選參數(shù),默認(rèn)為空,請求頭。
follow_redrects:可選參數(shù),表示是否啟動(dòng)自動(dòng)重定向,默認(rèn)為true
body:可選參數(shù),即表單數(shù)據(jù),默認(rèn)為空
set_content()
此方法用來設(shè)置頁面的內(nèi)容,示例如下:
function main(splash, args) assert(splash:set_content("hello
")) return splash:png() end
html()
此方法用來獲得網(wǎng)頁的源代碼
png()
此方法用來獲取PNG格式的網(wǎng)頁截圖。
jpeg()
此方法用來獲取JPEG格式的網(wǎng)頁截圖。
har()
此方法用來獲得頁面加載過程描述
url()
此方法可以獲取當(dāng)前正在訪問的URL
get_cookies()
此方法可以獲取當(dāng)前頁面的Cookies。
add_cookies()
此方法可以為當(dāng)前頁面添加Cookies。
clear_cookies()
此方法可以清除所有的Cookies。
get_viewport_size()
此方法可以獲取當(dāng)前瀏覽器頁面的大小。
set_viewport_size()
此方法可以設(shè)置當(dāng)前瀏覽器頁面的大小
set_viewport_full()
此方法可以設(shè)置瀏覽器全屏顯示
set_uer_agent()
此方法可以設(shè)置瀏覽器的User-Agent。
set_custom_headers()
此方法可以設(shè)置請求頭
select()
該方法可以選中符合條件的第一個(gè)節(jié)點(diǎn),如果有多個(gè)節(jié)點(diǎn)符合條件,則只會(huì)返回一個(gè),其參數(shù)時(shí)CSS選擇器。
select_all()
此方法可以選中所有符合條件的節(jié)點(diǎn),其參數(shù)是CSS選擇器。
mouse_click()
此方法可以模擬鼠標(biāo)點(diǎn)擊操作,傳入的參數(shù)為坐標(biāo)值的x 和y。此外,也可以直接選中某個(gè)節(jié)點(diǎn),然后調(diào)用此方法。
Splash API調(diào)用與python結(jié)合調(diào)用。
render.html
此接口用于獲取JavaScript渲染的頁面的HTML代碼,接口地址就是Splash的運(yùn)行地址加此接口名稱,
例如 :
http://localhost:8050/render.html?url=https://www.baidu.com
我們給此接口傳遞了一個(gè)url參數(shù)來指定渲染的URL,返回結(jié)果即頁面渲染后的源代碼。
render.png
此接口可以獲取網(wǎng)頁截圖,通過width和heigh來控制寬高,返回PNG格式的圖片二進(jìn)制數(shù)據(jù)。示例如下:
curl http://localhost:8050/rnder.png?url=https://www.taobao.com&wait=5&width=1000&height=700
render.jpeg
此接口接口返回jpeg格式的網(wǎng)頁截圖。參數(shù)quality用來設(shè)置圖片質(zhì)量。
render.har
此接口用于獲取頁面加載的HAR數(shù)據(jù),示例如下:
curl http://localhost:8050/render.har?url=https://www.jd.com&wait=5
render.json
此接口包含了前面接口的所有功能,返回結(jié)果是JSON格式。
execute
此接口是最為強(qiáng)大的接口,實(shí)現(xiàn)了與Lua腳本的對接。
Splash負(fù)載均衡設(shè)置負(fù)載均衡的目的就是為了多個(gè)服務(wù)器分擔(dān)壓力。
假設(shè)四臺(tái)服務(wù)器哦IP地址為:
127.0.0.1
127.0.0.2
127.0.0.3
127.0.0.4
四臺(tái)服務(wù)器的Splash均通過dockers的splash鏡像在端口:8050開啟服務(wù)。
選擇任意一臺(tái)帶有公網(wǎng)IP的主機(jī)來配置負(fù)載均衡。
首先在服務(wù)器安裝Nginx。
修改Nginx的配置文件nginx.conf,添加如下內(nèi)容:
http { upstream splash { # 服務(wù)器集群名為splash least_conn; # 代表最少鏈接負(fù)載均衡,去掉此行將使用默認(rèn)的輪詢策略實(shí)現(xiàn)負(fù)載均衡 # 若使用ip_hash,此方法確保同一服務(wù)器響應(yīng)請求,此方法適合有狀態(tài)的服務(wù)。 # Splash不需要應(yīng)用此設(shè)置。 server 127.0.0.1:8050; # 還可以添加weight參數(shù)設(shè)置權(quán)值,權(quán)值越高分配到的請求越多。 server 127.0.0.2:8050; server 127.0.0.3:8050; server 127.0.0.4:8050; } server { listen 8050; location / { proxy_pass http://splash; # 設(shè)置下面兩行來進(jìn)行用戶認(rèn)真。 auth_basic "Restricted"; auth_baseic_user_file /etc/nginx/conf.d/.htpasswd; } } }
上面用戶認(rèn)證的用戶名和密碼配置放置在 /etc/nginx/conf.d 目錄下,我們需要使用htpasswd命令創(chuàng)建。
例如,創(chuàng)建一個(gè)用戶名為admin的文件,相關(guān)命令如下:
htpasswd -c .htpasswd admin
之后輸入兩次密碼即可。
配置完成后需要重啟Nginx服務(wù)。
測試文件在
./test_load_balance.py
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/40483.html
摘要:負(fù)載均衡設(shè)置負(fù)載均衡的目的就是為了多個(gè)服務(wù)器分擔(dān)壓力。修改的配置文件,添加如下內(nèi)容服務(wù)器集群名為代表最少鏈接負(fù)載均衡,去掉此行將使用默認(rèn)的輪詢策略實(shí)現(xiàn)負(fù)載均衡若使用,此方法確保同一服務(wù)器響應(yīng)請求,此方法適合有狀態(tài)的服務(wù)。 輸入下面命令運(yùn)行splash: docker run -p 8050:8050 scrapinghub/splash 一個(gè)splash的基本實(shí)例: function ...
摘要:前言接初識上,這篇主要是異步問題有收獲的話請加顆小星星,沒有收獲的話可以反對沒有幫助舉報(bào)三連代碼倉庫初識下異步任務(wù)設(shè)置異步任務(wù)的工作進(jìn)程數(shù)量連接連接歡迎大山驢回調(diào)投遞異步任務(wù)觸發(fā)異步任務(wù)服務(wù)端回復(fù)說處理異步任務(wù)新的異步任務(wù) 前言:接初識swoole【上】,這篇主要是異步問題 有收獲的話請加顆小星星,沒有收獲的話可以 反對 沒有幫助 舉報(bào)三連 代碼倉庫 初識swoole【下】 6、異...
摘要:如何在中使用動(dòng)畫前端掘金本文講一下中動(dòng)畫應(yīng)用的部分。與的快速入門指南推薦前端掘金是非常棒的框架,能夠創(chuàng)建功能強(qiáng)大,動(dòng)態(tài)功能的。自發(fā)布以來,已經(jīng)廣泛應(yīng)用于開發(fā)中。 如何在 Angular 中使用動(dòng)畫 - 前端 - 掘金本文講一下Angular中動(dòng)畫應(yīng)用的部分。 首先,Angular本生不提供動(dòng)畫機(jī)制,需要在項(xiàng)目中加入Angular插件模塊ngAnimate才能完成Angular的動(dòng)畫機(jī)制...
摘要:下的異步嘗試系列下的異步嘗試一初識生成器下的異步嘗試二初識協(xié)程下的異步嘗試三協(xié)程的版自動(dòng)執(zhí)行器下的異步嘗試四版的下的異步嘗試五版的的繼續(xù)完善生成器類獲取迭代器當(dāng)前值獲取迭代器當(dāng)前值返回當(dāng)前產(chǎn)生的鍵生成器從上一次處繼續(xù)執(zhí)行重置迭代器向生成器中 PHP下的異步嘗試系列 PHP下的異步嘗試一:初識生成器 PHP下的異步嘗試二:初識協(xié)程 PHP下的異步嘗試三:協(xié)程的PHP版thunkify自...
摘要:系列一初識系列二組件的和系列三組件的生命周期是推出的一個(gè)庫,它的口號就是用來創(chuàng)建用戶界面的庫,所以它只是和用戶界面打交道,可以把它看成中的視圖層。系列一初識系列二組件的和系列三組件的生命周期 React系列---React(一)初識ReactReact系列---React(二)組件的prop和stateReact系列---React(三)組件的生命周期 showImg(https://...
閱讀 1819·2021-11-23 09:51
閱讀 927·2021-10-08 10:05
閱讀 3420·2021-09-26 09:55
閱讀 1030·2021-09-22 15:21
閱讀 1625·2021-09-09 09:33
閱讀 1233·2019-08-30 15:56
閱讀 1274·2019-08-30 15:55
閱讀 958·2019-08-30 13:19