Phantomjs的正確開啟方式

2021-09-20 17:12:26 字數 1530 閱讀 6251

前段時間分析了selenium+phantomjs的使用方法以及效能優化問題,期間也分析了利用selenium+phantomjs爬蟲爬過的一些坑問題。然而在使用phantomjs的過程中,並沒有正真提公升phantomjs的效能,爬蟲效能也沒有很好的提公升。經過網友的提醒,發現其實是使用phantomjs的方法出了問題,因此無論怎麼優化,都不能從根本上去提公升效能。那麼本篇就來好好說說,phantomjs正確的開啟方式。

拋棄selenium+phantomjs

之前我一直使用selenium去使用phantomjs,原因是因為selenium封裝了phantomjs一部分功能,selenium又提供了python的介面模組,在python語言中可以很好地去使用selenium,間接地就可以使用phantomjs。然而,我現在要說的是,是時候拋棄selenium+phantomjs了,原因之一此封裝的介面很久沒有更新了(沒人維護了),原因之二selenium只實現了一部分phantomjs功能,且很不完善。  

phantomjs api

通過檢視phantomjs官方介紹,我們可以發現phantomjs的功能異常強大,絕不僅僅是selenium封裝的功能那麼簡陋。phantomjs提供了很多種api,具體可以檢視:phantomjs api介紹,其中最常用的要屬phantomjs webservice與phantomjs webpage,前者用於開啟http服務,後者用於發起http請求。

phantomjs正確使用方式

正確開啟方式應該使用phantomjs webservice作為一種web服務的形式(api),將其與其他語言分離開來(比如python)。

設計流程

python通過http請求下發任務,phantomjs webservice獲取任務後去處理,處理完以後再將結果返回給python。任務排程、儲存等複雜操作交給python去做,python可以寫成非同步併發去請求phantomjs webservice,需要注意的是目前乙個phantomjs webservice只支援10個併發。但我們可以在一台伺服器上多開幾個phantomjs webservice啟用不同的埠即可,或者可以多台伺服器做個集群,用nginx做反向**。

phantomjs webservice

新建test.js,寫入如下**:

作用:處理http請求,獲取url,進行截圖或者獲取原始碼操作。 

使用:phantomjs.exe test.js

會在本地開啟web服務,埠為8080。

python client

新建http_request.py,寫入如下**:

作用:非同步併發下發任務。

執行截圖

執行python以後,非同步下發10個任務,phantomjs伺服器端接收到url並開始處理,併發處理10個任務並輸入結果。

原文發布時間為:2017-08-27

SpringBoot開啟單元測試的正確方法

快捷鍵 command shift t 將游標放在需要測試的類名上 測試類上新增註解 runwith springrunner.class springboottest classes 啟動類.class 測試方法新增註解 test 注意 import的包是 import org.junit.tes...

C 語法 await與async的正確開啟方式

c 5.0推出了新語法,await與async,但相信大家還是很少使用它們。關於await與async有很多文章講解,但有沒有這樣一種感覺,你看完後,總感覺這東西很不錯,但用的時候,總是想不起來,或者不知道該怎麼用。為什麼呢?我覺得大家的await與async的開啟方式不正確。正確的開啟方式 首先看...

PhantomJS實現最簡單的模擬登入方案

以前寫爬蟲,遇到需要登入的頁面,一般都是通過chrome的檢查元素,檢視登入需要的引數和加密方法,如果 的加密非常複雜,例如登入qq的,就會很蛋疼 在後面,有了pyv8,就可以把加密的js檔案扔給它,然後返回加密後的字串。但是pyv8只能安裝在centos7的版本,而且耗用記憶體也比較大。現在有了p...