Scrapy對接Splash基礎知識學習


一:什么是Splash

Splash是一個 JavaScript渲染服務,是一個帶有 HTTPAPI 的輕量級瀏覽器

 

1 功能介紹

利用 Splash,我們可以實現如下功能:

口異步方式處理多個網頁渲染過程;

口 獲取渲染后的頁面的源代碼或截圖; 

口 通過關閉圖片渲染或者使用 Adblock規則來加快頁面渲染速度; 

口 可執行特定的 JavaScript腳本; 

口可通過 Lua 腳本來控制頁面渲染過程; 

口 獲取渲染的詳細過程並通過 HAR ( HTTP Archive )格式呈現。 

 

2:安裝教程(不做介紹,小伙伴可自行百度,教程很多)

 

3:Splash使用到的方法:

go()--------------go()方法去加載頁,且它可以模擬 GET 和 POST請求,同時支持傳入請求頭,表單等數據

wait()------------wait()方法可以控制頁面的等待時間

evaljs()----------evaljs()方法傳入JavaScript腳本並返回最后一條 JavaScript語句的返回結果

wait()----------- wait()方法類似於 Python 中的 sleep(),其參數為等待的秒數。 

 jsfunc() ------------可以直接調用 JavaScript 定義的方法,但是所調用的方法需要用雙中括號包圍,這相當於 實現了                                 JavaScript方法到 Lua腳本的轉換

runjs()------------runjs()方法可以執行 JavaScript 代碼,它與 evaljs()的功能類似,但是更偏向於執行某些動作或聲                          明 某些方法

 autoload() ------ autoload() 方法可以設置每個頁面訪問時自動加載的對象

call_later()--------方法可以通過設置定時任務和延遲時間來實現任務延時執行,井且可以在執行前通過 cancel() 方法                            重新執行定時任務

http_get() --------此方法可以模擬發送 HTTP 的 GET請求

http _post()-----http_get()方法類似,此方法用來模擬發送 POST請求,不過多了一個參數 body

set_content() ------此方法用來設置頁面的內容

html() ----------此方法用來獲取網頁的源代碼

png() ------------此方法用來獲取 PNG 格式的網頁截圖

jpeg() -----------此方法用來獲取 JPEG 格式的網頁截圖

har() ------------此方法用來獲取頁面加載過程描述

url() ------------此方法可以獲取當前正在訪問的 URL

get_cookies() -----此方法可以獲取當前頁面的 Cookies

add_cookie() -----此方法可以為當前頁面添加 Cookie

clear_ cookies() ---此方法可以清除所有的 Cookies

get_viewport_size() ---此方法可以獲取當前瀏覽器頁面的大小,即寬高

set_viewport_full() ---此方法可以設置瀏覽器全屏顯示

set_user_agent() ----此方法可以設置瀏覽器的 User-Agent 

set_custom_headers() ---此方法可以設置請求頭

select() -------該方法可以選中符合條件的第一個節點,如果有多個節點符合條件, 則只會返回一個,其參數是 css                         選擇器

select_all() ------此方法可以選中所有符合條件的節點,其參數是 css 選擇器

 mouse_click() ------此方法可以模擬鼠標點擊操作,傳入的參數為坐標值 x 和 y。 此外,也可以直接選中某個節點,                                  然后調用此方法

 

4:Splash 對象屬性

function main(splash, args) 
   local url = args.url 
end 

• splash

main()方法的第一個參數是 splash ,這個對象非常重要,它類似於 Selenium 中的 WebDriver 對象,我們可以調用它的一些屬性和方法來控制加載過程

• args

 該屬性可以獲取加載時配置的參數

• js_enabled

這個屬性是 Splash的JavaScript執行開關,可以將其配置為true或false來控制是否執行JavaScript 代碼,默認為 true

• resource_timeout

此屬性可以設置加載的超時時間,單位是秒。 如果設置為 0 或 nil (類似 Python 中的 None ),代 表不檢測超時

• images_ enabled

此屬性可以設置圖片是否加載,默認情況下是加載的

• plugins _enabled

此屬性可以控制瀏覽器插件(如 Flash 插件)是否開啟 。 默認情況下,此屬性是 false,表示不開 啟 

• scroll_position

通過設置此屬性,我們可以控制頁面上下或左右滾動。 這是一個比較常用的屬性

 

二:Splash API 調用

• render.html 

此接口用於獲取 JavaScript渲染的頁面的 HTML 代碼,接口地址就是 Splash 的運行地址加此接口 名稱,

 • render.pug 

此接口可以獲取網頁截圖,其參數比 render.html 多了幾個,比如通過 width 和 height 來控制寬高, 它返回的是 PNG 格式的圖片二進制數據

render.jpeg

此接口和 render.pug類似,不過它返回的是 JPEG 格式的圖片二進制數據。
另外, 此接口比 render.png 多了參數 quality,它用來設置罔片質量。

render.bar 

此接口用於獲取頁面加載的 HAR數據,它的運回結果非常多,是一個 JSON 格式的數據,其中包含頁面加載過程巾的 HAR數據。

render.json 

此接口包含了前面接口的所有功能,返回結果是 JSON 格式

• execute
此接口才是最為強大的接口 。 前面說了很多 Splash Lua腳本的操作,用此接口便可實現與 Lua腳 本的對接。

如果要實現 一些交互操作的話,這里就需要使用 execute 接口了。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM