天天看點

[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)

        最近在使用python爬取網頁内容時,總是遇到js臨時加載、動态擷取網頁資訊的困難。例如爬取csdn下載下傳資源評論、搜狐圖檔中的“原圖”等,此時嘗試學習phantomjs和casperjs來解決這個問題。這第一篇文章當然就是安裝過程及入門介紹。

        官網介紹:

          phantomjs is a headless webkit scriptable with a javascript api. it has fast and native support for various

web standards: dom handling, css selector, json, canvas, and svg.

          full web stack no browser required.

dom 處理, css 選擇器, json, canvas 和 svg。phantomjs可以用于頁面自動化,網絡監測,網頁截屏,以及無界面測試等。

        下載下傳phantomjs解壓後如下圖所示:

[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)

        在該檔案夾下建立test.js檔案,代碼如下:

        通過ctrl+r打開cmd調用phantomjs.exe執行該程式輸出如下圖所示:

[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)

        1、腳本參數-arguments.js

        同時其自帶的examples檔案夾中有很多模闆代碼,其中擷取腳本參數代碼如下:

        運作程式及輸出結果如下圖所示:

        phantomjs examples/arguments.js arg0 agr1 arg2 arg3

[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)

        2、網頁截圖

        在根目錄建立檔案loadpic.js,其代碼如下:

        運作程式結果如下圖所示:

        phantomjs loadpic.js

[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)

        短短5行代碼讓我第一次體會到了phantomjs和調用腳本函數的強大,它加載baidu頁面并存儲為一張png圖檔,這個特性可以廣泛适用于網頁快拍、擷取網頁線上知識等功能。同時也感受到了似乎能夠解決我最初的加載js問題。

        3、頁面加載-page loading

          a web page can be loaded, analyzed, and rendered by creating a web page object.

        通過建立一個網頁對象,一個網頁可以被加載,分析和渲染。examples檔案夾中的loadspeed.js腳本加載一個特殊的url (不要忘了http協定) 并且計量加載該頁面的時間。

        運作程式如所示:

        phantomjs examples/loadspeed.js http://www.baidu.com

        其中包括document.title擷取網頁标題和t=date.now()-t計算網頁加載時間。此時輸出如下圖所示,但會存在中文亂碼,如何解決呢?

[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)

        添加如下代碼即可:

        t = date.now();

        address = system.args[1];

        phantom.outputencoding="gbk";

[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)

        4.代碼運算-code evaluation

        通過在網頁上下文中對javascript代碼進行計算,使用evaluate()方法。代碼是在“沙箱(sandboxed)”中運作的,它沒有辦法讀取在其所屬頁面上下文之外的任何javascript對象和變量。evaluate()會傳回一個對象,然而它僅限制于簡單的對象并且不能包含方法或閉包。

        下面這段代碼用于顯示網頁标題:

        輸出如下圖所示:

[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)

        任何來自于網頁并且包括來自evaluate()内部代碼的控制台資訊,預設不會顯示的。要重寫這個行為,使用onconsolemessage回調函數,前一個示例可以被改寫成:

        調用phantomjs gettile2.js即可。

        5.dom操作-dom manipulation

        因為腳本好像是一個web浏覽器上運作的一樣,标準的dom腳本和css選擇器可以很好的工作。這使得phantomjs适合支援各種頁面自動化任務。

        下面的 useragent.js(examples檔案樣本)将讀取id 為myagent的元素的 textcontent 屬性:

        輸入如下指令,擷取id=myagent元素的值:

        phantomjs examples/useragent.js

[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)

         上面示例也提供了一種自定義user agent的方法。

         使用jquery及其他類庫(use jquery and other libraries)。如果版本是1.6,你也可以把jquery放入你的頁面中,使用page.includejs如下:

          the above snippet will open up a web page, include the jquery library into the page, and then click on all buttons using jquery. it will then exit from the web page. make sure

to put the exit statement within the page.includejs or else it may exit prematurely before the javascript code is included.

        即需要確定javascript代碼中包括引用的頁面存在。the webpage instance具體用法參考前面官方文檔。

        6.網絡請求及響應 – network requests and responses

        當一個頁面從一台遠端伺服器請求一個資源的時候,請求和響應均可以通過 onresourcerequested 和 onresourcereceived 回調方法追蹤到。文檔示例 netlog.js:

        輸入指令:

        phantomjs examples/netlog.js http://www.baidu.com

        輸出部分内容:

        下面顯示了從英國廣播公司網站獲得典範的瀑布圖(waterfall diagram):

[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)
[Python爬蟲] 在Windows下安裝PhantomJS和CasperJS及入門介紹(上)

        ps:準備下一篇文章介紹

參考資料:

        最後希望文章對你有所幫助吧!如果有不足之處,還請海涵~

繼續閱讀