1. 程式人生 > >Python精講Pyspider例項基礎

Python精講Pyspider例項基礎

之前接觸scrapy本來是想也許scrapy能夠讓我的爬蟲更快,但是也許是我沒有掌握scrapy的要領,所以爬蟲執行起來並沒有我想象的那麼快,看這篇文章就是之前使用scrapy的寫得爬蟲。然後昨天我又看到了pyspider,說實話本來只是想看看,但是沒想到一看就讓我喜歡上了pyspider。

先給大家看一下pyspider的後臺截圖:

Python精講Pyspider例項基礎

pyspider的後臺截圖

pyspider是國人寫的一款開源爬蟲框架,個人覺得這個框架用起來很方便,至於如何方便可以繼續看下去。

安裝pyspider

安裝pyspider:

Python精講Pyspider例項基礎

如果你是32位系統,就這樣安裝:

pip install pycurl
pip install pyspider12

如果你是64位系統,且不是強迫症,能夠接受不完美的事物,就這樣安裝:

下載重新編譯過的pycurl,然後安裝。

然後cmd輸入:pip install pyspider

第一個pyspider爬蟲

  • 開啟cmd,輸入pyspider,然後開啟瀏覽器輸入:http://localhost:5000, 然後就可以進入pyspider的後臺了。

Python精講Pyspider例項基礎

第一次開啟後臺是一片空白的。(點開瀏覽器後cmd不要關了!)

  • 點選Create,隨便輸入一個名字(當然名字還是不要亂取)。

Python精講Pyspider例項基礎

  • 點選確定之後就進入一個指令碼編輯器了

Python精講Pyspider例項基礎

建立專案的時候也自動建立了一個指令碼,這裡我們只需要改動指令碼OK。我們要爬豆瓣的所有電影,選擇http://movie.douban.com/tag/為起始點,也就是從這裡開始爬。

  • 首先是改動on_start

Python精講Pyspider例項基礎

這裡沒什麼講的,改個網址而已,callback就是呼叫下一個函式開始這個起始網頁。

  • 改動index_page函式

我們先來看一下啟示網頁張怎樣?

Python精講Pyspider例項基礎

有按型別分類,也有按國家/地區分類,還有按年代分類。我們可以選擇按國家/地區分類,也可以選擇按年代分類,最好不選擇按型別分類,因為同一部電影既可能是愛情片、又可能是動作片(感覺怪怪的)。我這裡選擇按年代分類。

先看一下index_page我是怎麼改的。

Python精講Pyspider例項基礎

可以看到我們是從response.doc之中選擇tag的,然後

#content>div>div.article> table:nth-child(9)>tbody>tr>td>a

熟悉css selector的朋友可能會很熟悉這種東西,然而我是第一次接觸,所以講不出個所以然來。其實css selector跟正則表示式、xpath一樣,也是一種內容選擇的方法,然後也很好理解這是什麼意思。

這是分隔符,熟悉css selector的朋友可以不用看下面的部分


我們先看一下

Python精講Pyspider例項基礎

我們要選擇的是2013、2012到1989這部分內容,那麼我們右鍵選擇2013然後審查元素

Python精講Pyspider例項基礎

Python精講Pyspider例項基礎

然後在連結中右鍵選擇copy css path得到一個然後複製到文字中,我們選多幾個tag的css path,檢視一下規律

Python精講Pyspider例項基礎

可以看到選中的幾個tag的css path不同點就在我紅線標出的地方,那麼我們把他們的不同之處去掉,只留下相同的部分,也就是最下面的一行,把他複製下來,放到

Python精講Pyspider例項基礎

括號裡面,告訴爬蟲,我們要爬的部分在這個path下!

這就是一個得到css path的方法,就連我這個第一次接觸css selector的人都可以找到

下面迴歸

接著是

Python精講Pyspider例項基礎

我們先把符合上面css path規則的部分進行了替換,把www替換為了movie。為什麼這樣做呢?我們分別開啟

http://www.douban.com/tag/2013/?focus=movie 和 http://movie.douban.com/tag/2013/?focus=movie 來看。

Python精講Pyspider例項基礎

Python精講Pyspider例項基礎

可以看到www的是沒有翻頁的!!!而movie的是有翻頁的!!!我們要遍歷所有電影,當然要有翻頁了!!!所以這就是替換的原因所在!

Python精講Pyspider例項基礎

這段程式碼就是把得到的類似http://movie.douban.com/tag/2013?focus=movie的網頁交給了下一個函式去解析了!

  • 改動list_page函式

Python精講Pyspider例項基礎

這裡的css path我是有pyspider自帶的css selector helper得到的。說到這裡就再講一下pyspider自帶的css selector helper怎麼用(當然這不是萬能的,要不然上面我也不會用瀏覽器的審查元素進行獲取css path)

Python精講Pyspider例項基礎

我們先點選指令碼編輯器的中間上方的run

Python精講Pyspider例項基礎

選擇follows,看到這樣的

點選箭頭繼續。

Python精講Pyspider例項基礎

順便說一下,如果點選箭頭follows就沒有連結了,那麼說明你上一個函式的css path沒有選對!回去修改!!

到這裡再選一個連結的箭頭繼續。回到web下。

Python精講Pyspider例項基礎

我們改動list_page的任務有兩個,一個是選擇一個電影的詳細內容的連結交給下一個函式處理,還有一個就是翻頁繼續由list_page函式處理。

選擇enable css selector path然後點選一個電影連結,就會發現所有的電影連結都被紅框框給框起來了!

Python精講Pyspider例項基礎

我們把滑鼠選擇到圖中一處,然後點選網頁中間上方的箭頭,也就是圖中標出的地方,然後就把網頁詳細內容連結的css path新增進來了!

同理可以把翻頁的css path得到。

8.改動detail_page函式

Python精講Pyspider例項基礎

這個就簡單了,已經到了電影詳細內容網頁,就看你要什麼內容,然後利用css selector helper進行選擇就可以了!我這裡只返回了url、電影標題、評分和導演四項!

到這裡,爬蟲基本上寫完了,點選save,返回dashboard,把爬蟲的狀態改成Running或者debug,然後再點選右方的run,爬蟲就啟動了!!