Python精講Pyspider例項基礎
之前接觸scrapy本來是想也許scrapy能夠讓我的爬蟲更快,但是也許是我沒有掌握scrapy的要領,所以爬蟲執行起來並沒有我想象的那麼快,看這篇文章就是之前使用scrapy的寫得爬蟲。然後昨天我又看到了pyspider,說實話本來只是想看看,但是沒想到一看就讓我喜歡上了pyspider。
先給大家看一下pyspider的後臺截圖:
pyspider的後臺截圖
pyspider是國人寫的一款開源爬蟲框架,個人覺得這個框架用起來很方便,至於如何方便可以繼續看下去。
安裝pyspider
安裝pyspider:
如果你是32位系統,就這樣安裝:
pip install pycurl pip install pyspider12
如果你是64位系統,且不是強迫症,能夠接受不完美的事物,就這樣安裝:
下載重新編譯過的pycurl,然後安裝。
然後cmd輸入:pip install pyspider
第一個pyspider爬蟲
-
開啟cmd,輸入pyspider,然後開啟瀏覽器輸入:http://localhost:5000, 然後就可以進入pyspider的後臺了。
第一次開啟後臺是一片空白的。(點開瀏覽器後cmd不要關了!)
-
點選Create,隨便輸入一個名字(當然名字還是不要亂取)。
-
點選確定之後就進入一個指令碼編輯器了
建立專案的時候也自動建立了一個指令碼,這裡我們只需要改動指令碼OK。我們要爬豆瓣的所有電影,選擇http://movie.douban.com/tag/為起始點,也就是從這裡開始爬。
-
首先是改動on_start
這裡沒什麼講的,改個網址而已,callback就是呼叫下一個函式開始這個起始網頁。
-
改動index_page函式
我們先來看一下啟示網頁張怎樣?
有按型別分類,也有按國家/地區分類,還有按年代分類。我們可以選擇按國家/地區分類,也可以選擇按年代分類,最好不選擇按型別分類,因為同一部電影既可能是愛情片、又可能是動作片(感覺怪怪的)。我這裡選擇按年代分類。
先看一下index_page我是怎麼改的。
可以看到我們是從response.doc之中選擇tag的,然後
#content>div>div.article> table:nth-child(9)>tbody>tr>td>a
熟悉css selector的朋友可能會很熟悉這種東西,然而我是第一次接觸,所以講不出個所以然來。其實css selector跟正則表示式、xpath一樣,也是一種內容選擇的方法,然後也很好理解這是什麼意思。
這是分隔符,熟悉css selector的朋友可以不用看下面的部分
我們先看一下
我們要選擇的是2013、2012到1989這部分內容,那麼我們右鍵選擇2013然後審查元素
然後在連結中右鍵選擇copy css path得到一個然後複製到文字中,我們選多幾個tag的css path,檢視一下規律
可以看到選中的幾個tag的css path不同點就在我紅線標出的地方,那麼我們把他們的不同之處去掉,只留下相同的部分,也就是最下面的一行,把他複製下來,放到
括號裡面,告訴爬蟲,我們要爬的部分在這個path下!
這就是一個得到css path的方法,就連我這個第一次接觸css selector的人都可以找到
下面迴歸
接著是
我們先把符合上面css path規則的部分進行了替換,把www替換為了movie。為什麼這樣做呢?我們分別開啟
http://www.douban.com/tag/2013/?focus=movie 和 http://movie.douban.com/tag/2013/?focus=movie 來看。
可以看到www的是沒有翻頁的!!!而movie的是有翻頁的!!!我們要遍歷所有電影,當然要有翻頁了!!!所以這就是替換的原因所在!
這段程式碼就是把得到的類似http://movie.douban.com/tag/2013?focus=movie的網頁交給了下一個函式去解析了!
-
改動list_page函式
這裡的css path我是有pyspider自帶的css selector helper得到的。說到這裡就再講一下pyspider自帶的css selector helper怎麼用(當然這不是萬能的,要不然上面我也不會用瀏覽器的審查元素進行獲取css path)
我們先點選指令碼編輯器的中間上方的run
選擇follows,看到這樣的
點選箭頭繼續。
順便說一下,如果點選箭頭follows就沒有連結了,那麼說明你上一個函式的css path沒有選對!回去修改!!
到這裡再選一個連結的箭頭繼續。回到web下。
我們改動list_page的任務有兩個,一個是選擇一個電影的詳細內容的連結交給下一個函式處理,還有一個就是翻頁繼續由list_page函式處理。
選擇enable css selector path然後點選一個電影連結,就會發現所有的電影連結都被紅框框給框起來了!
我們把滑鼠選擇到圖中一處,然後點選網頁中間上方的箭頭,也就是圖中標出的地方,然後就把網頁詳細內容連結的css path新增進來了!
同理可以把翻頁的css path得到。
8.改動detail_page函式
這個就簡單了,已經到了電影詳細內容網頁,就看你要什麼內容,然後利用css selector helper進行選擇就可以了!我這裡只返回了url、電影標題、評分和導演四項!
到這裡,爬蟲基本上寫完了,點選save,返回dashboard,把爬蟲的狀態改成Running或者debug,然後再點選右方的run,爬蟲就啟動了!!