最近准備深入學習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
第一步:下載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軟件


第三步:配置環境變量
此時在cmd中輸入pip指令會提示錯誤“不是內部或外部命令”。



下面在CMD中使用PIP命令,“pip list outdate”列舉Python安裝庫的版本信息。

1 Usage: 2 pip <command> [options] 3 4 Commands: 5 install 安裝軟件. 6 uninstall 卸載軟件. 7 freeze 按着一定格式輸出已安裝軟件列表 8 list 列出已安裝軟件. 9 show 顯示軟件詳細信息. 10 search 搜索軟件,類似yum里的search. 11 wheel Build wheels from your requirements. 12 zip 不推薦. Zip individual packages. 13 unzip 不推薦. Unzip individual packages. 14 bundle 不推薦. Create pybundles. 15 help 當前幫助. 16 17 General Options: 18 -h, --help 顯示幫助. 19 -v, --verbose 更多的輸出,最多可以使用3次 20 -V, --version 現實版本信息然后退出. 21 -q, --quiet 最少的輸出. 22 --log-file <path> 覆蓋的方式記錄verbose錯誤日志,默認文件:/root/.pip/pip.log 23 --log <path> 不覆蓋記錄verbose輸出的日志. 24 --proxy <proxy> Specify a proxy in the form [user:passwd@]proxy.server:port. 25 --timeout <sec> 連接超時時間 (默認15秒). 26 --exists-action <action> 默認活動當一個路徑總是存在: (s)witch, (i)gnore, (w)ipe, (b)ackup. 27 --cert <path> 證書. 28
三. 安裝Phantomjs+Selenium
通過pip命令安裝Selenium:




設置executable_path路徑后的代碼如下:
1 from selenium import webdriver 2 driver = webdriver.PhantomJS(executable_path="F:\Python\phantomjs-1.9.1-windows\phantomjs.exe") 3 driver.get("http://www.baidu.com") 4 data = driver.title 5 print data

<title>百度一下,你就知道</title>
但是總會彈出PhantomJS的黑框,怎么辦呢?同時如何通過Python直接調用Phantomjs運行JS呢?
同時下面的代碼可以進行截圖:
1 from selenium import webdriver 2 driver=webdriver.PhantomJS(executable_path="F:\Python\phantomjs-1.9.1-windows\phantomjs.exe") 3 driver.get("http://www.csdn.net") 4 data = driver.title 5 driver.save_screenshot('csdn.png') 6 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/)