最近在弄一個需求,需要寫到爬蟲,本來是使用php的,但是php沒有一款可以滿足需要的爬蟲框架,于是轉(zhuǎn)而使用python。
目前比較流利的python爬蟲框架有好多,這次最主要接觸了ghost.py、spynner
解析就使用了beautiful
這篇文章最主要還是記錄一下一些坑。
先說一下這兩款的共性,就是都會用到pyqt,所以安裝之前一定先要安裝pyqt,至于原因,則是因為兩者都是基于webkit瀏覽器內(nèi)核的爬蟲框架,所以會使用到pyqt,總之你懂的。
關(guān)于ghost.py
安裝這款框架過程曲折離奇,我首先是在osx系統(tǒng)下面安裝的,首先我
pip install ghost.py
寫好了例子,之后提示沒有qt庫
然后則安裝pyqt
sudo brew install pyqt
安裝完畢之后,你還會發(fā)現(xiàn)錯誤,因為你還需要安裝pyside
pip instll pyside
再之后,你才可以使用ghost.py,這過程究竟有多少辛酸,由于沒有及時記錄,忘記了,如果你發(fā)現(xiàn)了什么其他的惡心的錯誤可以聯(lián)系我,我們來討論。
當(dāng)你安裝好,照著網(wǎng)上的教程亂敲一陣代碼之后,你會發(fā)現(xiàn),python始終提示你
ghost no attritube open
當(dāng)你看到這幾個觸目驚心的單詞,又完全沒有頭緒的時候!你就能體會我當(dāng)時的痛苦,一個代碼都沒錯,但是就是報錯,就是不能用!我Google了一陣,才發(fā)現(xiàn)!是版本問題,網(wǎng)上的教程太老了,全部都是0.1的,現(xiàn)在都0.2了,你會發(fā)現(xiàn),0.2的使用方法改變了,在0.2的里面,你不可以直接open,你需要這樣寫
from ghost import Ghost
ghost = Ghost()
session = ghost.start()
session.open("Your Url")
順便附上文檔
關(guān)于spynner
安裝過程略過,假設(shè)你安裝成功ghost.py,那這款框架,你可以直接pip搞定。
然而我想要說的坑并不在這里!
-
spynner在解析中文網(wǎng)站的時候,全部都是亂碼,意思就是解析不了,然而如何改變這種情況呢?我所搜到的方法就是在python的Lib/site-packages/下,找到spynner的源碼包,然后在/spynner下修改browser.py
把477行的def _get_html(self):函數(shù)下的return改成return unicode(self.webframe.toHtml().toUtf8(), 'utf-8', 'ignore') - 還有一個問題,就是windows用戶可能會遇到,
.egg文件結(jié)尾的文件并不能以文件夾形式打開,那這時候,你只要用壓縮軟件打開,然后解壓出來,就可以了,再之后你只要把文件替換回去,就可以解決這個問題
關(guān)于beautifulsoup
你在使用beautifulsoup的時候可能會遇到一個問題,也是編碼問題,這時候,你記得在實例化beautifulsoup的時候加上from_encoding="utf-8"參數(shù),就可以解決這個問題。
關(guān)于這兩天爬蟲遇到的坑就記錄到此。
后記
最近我又開始研究爬蟲的東西了,然后我發(fā)現(xiàn),其實有一種很好的解決方案,來自于chrome的擴展插件。其實如果利用插件功能,配合你服務(wù)器上的接口用ajax來接收數(shù)據(jù),能夠很簡單的實現(xiàn)爬蟲功能,并且純模擬瀏覽器操作,成本非常低,能夠省去好多繁復(fù)的研究各種框架的時間