最近有一個私人項目要搞,可能最近的博客都會變成爬蟲跟數據分析類的了。既然是爬蟲,第一反應想到的就是鼎鼎大名的scrapy了,其次想到的pyspider,最后想到的就是自己寫。
scrapy是封裝了twisted的一個爬蟲框架,項目結構比較清晰

其中Item Pipeline決定了數據傳輸跟保存的結構,而爬蟲的核心部分在spider目錄下,而爬蟲也只需要關系核心的解析規則編寫。可以看出,scrapy框架搭了一個架子,在這框架中其實需要實現的核心功能還是要很多的,但是不需要關心中間件層面的東西了。另外scrapy很方便擴展,因此,是一個很不錯的輪子了。
另外一個就是pyspider,這個框架封裝了tornado,以及集成了一系列工具,比如lxml, css-selector-help,pyquery,phantomjs等,而且開放的api也相當精簡,相當於說,pyspider就是針對新手量身定做的一個框架,類似於scrapy中中間件的東西,這邊已經幫你集成好了,所有需要關心的就是你的爬蟲規則,甚至爬蟲規則都支持單步調試編寫,門檻幾乎為0了。
經過思考,如果要研究一個框架的技術,我決定還是研究pyspider會比較好,原因如下。
1.同樣的異步框架,tornado可能比twisted抽象程度更低,且更現代一點;
2.pyquery,phantomjs等都是目前比較流行的前端解析工具,因此研究一下它的接入方式以及api封裝對我來說更有實際價值;
3.不用操心scrapy的動態網站的處理,目前scrapy在我研究中發現,主要有幾種方式解決:
(1)scrapy-splash:https://github.com/scrapy-plugins/scrapy-splash,另外有一個實戰的例子也貼出來:http://blog.csdn.net/qq_23849183/article/details/51287935
(2)scrapy+spynner:實戰例子也貼一下:http://kevinflynn.iteye.com/blog/2230990
但是 spynner是基於PyQT 和 WebKit構建的,而splash也是基於twisted跟QT。有QT,那肯定效率不行啊,還不如用selenium了,在這一點上,phantomjs是基於webkit的js api,因此它的好處就是快。綜合考慮下,還是研究pyspider吧。
也許后續會貼出一系列pyspider源碼分析的文章。
