[Python爬蟲] 在Windows下安裝PIP+Phantomjs+Selenium

Eastmount發表於2015-08-19

        最近準備深入學習Python相關的爬蟲知識了,如果說在使用Python爬取相對正規的網頁使用"urllib2 + BeautifulSoup + 正規表示式"就能搞定的話;那麼動態生成的資訊頁面,如Ajax、JavaScript等就需要通過"Phantomjs + CasperJS + Selenium"來實現了。所以先從安裝和功能介紹入門,後面在介紹一些Python相關的爬蟲應用。

一. 介紹

       PhantomJS
        
PhantomJS是一個伺服器端的 JavaScript API 的WebKit(開源的瀏覽器引擎)。其支援各種Web標準: DOM 處理, CSS 選擇器, JSON, Canvas 和 SVG。PhantomJS可以用於頁面自動化,網路監測,網頁截圖,以及無介面測試等。
        Selenium
        Selenium是一個用於Web應用程式測試的工具。Selenium測試直接執行在瀏覽器中,就像真正的使用者在操作一樣。支援的瀏覽器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。
這個工具的主要功能包括:測試與瀏覽器的相容性、測試系統功能,它ThoughtWorks專門為Web應用程式編寫的一個驗收測試工具。
        PIP
        在介紹介紹它們之前,
需要安裝PIP軟體。正如xifeijian大神所說:“作為Python愛好者,如果不知道easy_install或者pip中的任何一個的話,那麼......”。
        easy_insall的作用和perl中的cpan,ruby中的gem類似,都提供了線上一鍵安裝模組的傻瓜方便方式,而pip是easy_install的改進版,提供更好的提示資訊,刪除package等功能。老版本的python中只有easy_install,沒有pip。常見的具體用法如下:

easy_install的用法:  
1) 安裝一個包  
 $ easy_install <package_name>  
 $ easy_install "<package_name>==<version>"  
2) 升級一個包  
 $ easy_install -U "<package_name>>=<version>"  
  
pip的用法  
1) 安裝一個包  
 $ pip install <package_name>  
 $ pip install <package_name>==<version>  
2) 升級一個包 (如果不提供version號,升級到最新版本)  
 $ pip install --upgrade <package_name>>=<version>  
3)刪除一個包  
 $ pip uninstall <package_name>  

二. 安裝PIP

        PS:你可以使用easy_install pip 直接安裝pip軟體,這更加方便。
        第一步:下載PIP軟體
        可以在官網http://pypi.python.org/pypi/pip#downloads下載,同時cd切換到PIP目錄,在通過python setup.py install安裝。而我採用的是下載pip-Win_1.7.exe進行安裝,下載地址如下:
        https://sites.google.com/site/pydatalog/python/pip-for-windows
        第二步:安裝PIP軟體




        當提示"pip and virtualenv installed"表示安裝成功,那怎麼測試PIP安裝成功呢?
        第三步:配置環境變數
        此時在cmd中輸入pip指令會提示錯誤“不是內部或外部命令”。
        所以需要新增path環境變數。PIP安裝完成後,會在Python安裝目錄下新增python\Scripts目錄,即在python安裝目錄的Scripts目錄下,將此目錄加入環境變數中即可!過程如下:


        第四步:使用PIP命令
        下面在CMD中使用PIP命令,“pip list outdate”列舉Python安裝庫的版本資訊。

        PIP常用的命令如下所示: (參考pip安裝使用詳解)
Usage:     
  pip <command> [options]  
   
Commands:  
  install                     安裝軟體.  
  uninstall                   解除安裝軟體.  
  freeze                      按著一定格式輸出已安裝軟體列表  
  list                        列出已安裝軟體.  
  show                        顯示軟體詳細資訊.  
  search                      搜尋軟體,類似yum裡的search.  
  wheel                       Build wheels from your requirements.  
  zip                         不推薦. Zip individual packages.  
  unzip                       不推薦. Unzip individual packages.  
  bundle                      不推薦. Create pybundles.  
  help                        當前幫助.  
   
General Options:  
  -h, --help                  顯示幫助.  
  -v, --verbose               更多的輸出,最多可以使用3次  
  -V, --version               現實版本資訊然後退出.  
  -q, --quiet                 最少的輸出.  
  --log-file <path>           覆蓋的方式記錄verbose錯誤日誌,預設檔案:/root/.pip/pip.log  
  --log <path>                不覆蓋記錄verbose輸出的日誌.  
  --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.  
  --timeout <sec>             連線超時時間 (預設15秒).  
  --exists-action <action>    預設活動當一個路徑總是存在: (s)witch, (i)gnore, (w)ipe, (b)ackup.  
  --cert <path>               證照.  

三. 安裝Phantomjs+Selenium

         通過pip命令安裝Selenium:





        官網http://phantomjs.org/下載PhantomJS解壓後如下圖所示:

        呼叫時可能會報錯“Unable to start phantomjs with ghostdriver”如圖:

        此時可以設定下Phantomjs的路徑,同時如果你配置了Scripts目錄環境變數,可以解壓Phantomjs到該資料夾下。
        參考:Selenium with GhostDriver in Python on Windows - stackoverflow

四. 測試程式碼


        設定executable_path路徑後的程式碼如下:
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path="F:\Python\phantomjs-1.9.1-windows\phantomjs.exe")
driver.get("http://www.baidu.com")
data = driver.title
print data
        執行結果如下圖所示:

        獲取"百度一下,你就知道",對應HTML原始碼:
        <title>百度一下,你就知道</title>
        但是總會彈出PhantomJS的黑框,怎麼辦呢?同時如何通過Python直接呼叫Phantomjs執行JS呢?
        同時下面的程式碼可以進行截圖:
from selenium import webdriver  
driver=webdriver.PhantomJS(executable_path="F:\Python\phantomjs-1.9.1-windows\phantomjs.exe")  
driver.get("http://www.csdn.net")  
data = driver.title
driver.save_screenshot('csdn.png')
print data

        輸出如下圖所示,圖片太長僅僅部分:
>>> 
CSDN.NET - 全球最大中文IT社群,為IT專業技術人員提供最全面的資訊傳播和服務平臺
>>> 

        PS:我準備使用C#呼叫PhantomJS.exe完成頁面截圖功能,但是沒有成功,而且使用WebBrowser中DrawToBitmap函式獲取圖片,由於ActiveX 控制元件不支援DrawToBitmap方法,獲取總是空白的,各種問題。

參考資料:
        資料抓取的藝術(一):Selenium+Phantomjs資料抓取環境配置(強推)
        資料抓取的藝術(二):資料抓取程式優化
        Python使用Selenium/PhantomJS(強推)
        Python selenium的js擴充套件實現
        使用python+phantomjs抓取動態頁面
        用phantomjs 進行網頁整頁截圖
        Selenium-webdriver系列教程(15)——萬能的截圖(強推)
        pyspider 爬蟲教程(三):使用 PhantomJS 渲染帶 JS 的頁面
       【PHP】【.NET】【JS】【AJAX】關於抓取網頁原始碼的問題
        使用python/casperjs編寫終極爬蟲-客戶端App的抓取
        Python 爬蟲如何獲取 JS 生成的 URL 和網頁內容-知乎
        通過 WebBrowser 獲取網頁截圖 - C#
        Control.DrawToBitmap 方法不支援Ajax - 官網
        IE瀏覽器整頁截圖程式(二) - C#
        C# 網路程式設計之最簡單瀏覽器實現 - 自己

        最後希望該篇基礎性文章對你有所幫助吧!如果有不足之處,還請海涵~
      (By:Eastmount 2015-8-19 晚上8點   http://blog.csdn.net/eastmount/

相關文章