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