前言
Splash是一個javascript渲染服務。它是一個帶有HTTP API的輕量級Web瀏覽器,使用Twisted和QT5在Python 3中實現。QT反應器用于使服務完全異步,允許通過QT主循環利用webkit并發。
一些Splash功能:
并行處理多個網頁 獲取HTML源代碼或截取屏幕截圖 關閉圖像或使用Adblock Plus規則使渲染更快 在頁面上下文中執行自定義JavaScript 可通過Lua腳本來控制頁面的渲染過程 在Splash-Jupyter 筆記本中開發Splash Lua腳本。 以HAR格式獲取詳細的渲染信息Scrapy-Splash的安裝分為兩部分,一個是Splash服務的安裝,具體通過Docker來安裝服務,運行服務會啟動一個Splash服務,通過它的接口來實現JavaScript頁面的加載;另外一個是Scrapy-Splash的Python庫的安裝,安裝后就可在Scrapy中使用Splash服務了,下面我們分三部份來安裝:
(1)安裝Docker
#安裝所需要的包:yum install -y yum-utils device-mapper-persistent-data lvm2#設置穩定存儲庫:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo#開始安裝DOCKER CE:yum install docker-ce#啟動dockers:systemctl start docker#測試安裝是否正確:docker run hello-world
(2)安裝splash服務
通過Docker安裝Scrapinghub/splash鏡像,然后啟動容器,創建splash服務
docker pull scrapinghub/splashdocker run -d -p 8050:8050 scrapinghub/splash#通過瀏覽器訪問8050端口驗證安裝是否成功
(3)Python包Scrapy-Splash安裝
pip3 install scrapy-splash
運行splash服務后,通過web頁面訪問服務的8050端口如:http://localhost:8050即可看到其web頁面,如下圖:
上面有個輸入框,默認是http://google.com,我們可以換成想要渲染的網頁如:https://www.baidu.com然后點擊Render me按鈕開始渲染,頁面返回結果包括渲染截圖、HAR加載統計數據、網頁源代碼:
從HAR中可以看到,Splash執行了整個頁面的渲染過程,包括CSS、JavaScript的加載等,通過返回結果可以看到它分別對應搜索框下面的腳本文件中return部分的三個返回值,html、png、har:
function main(splash, args) assert(splash:go(args.url)) assert(splash:wait(0.5)) return { html = splash:html(), png = splash:png(), har = splash:har(), }end
這個腳本是使用Lua語言寫的,它首先使用go()方法加載頁面,wait()方法等待加載時間,然后返回源碼、截圖和HAR信息。
新聞熱點
疑難解答