版權聲明:本文爲博主原創文章,未經博主容許不得轉載。javascript
以前接觸scrapy原本是想也許scrapy可以讓個人爬蟲更快,可是也許是我沒有掌握scrapy的要領,因此爬蟲運行起來並無我想象的那麼快,看這篇文章就是以前使用scrapy的寫得爬蟲。而後昨天我又看到了pyspider,說實話原本只是想看看,可是沒想到一看就讓我喜歡上了pyspider。html
先給你們看一下pyspider的後臺截圖:
pyspider是國人寫的一款開源爬蟲框架,我的以爲這個框架用起來很方便,至於如何方即可以繼續看下去。
做者博客:http://blog.binux.me/
這篇文章是我照着做者的這篇文章所作,爬取得是豆瓣電影,我也照着爬豆瓣電影,可是原文章有些地方再也不適用,這裏我會有些改正,以適應網頁所發生的變化。java
安裝pyspider:pip install pyspider
目測pyspider只支持32位系統,由於安裝pyspider前須要先安裝一個依賴庫:pycurl,而pycurl只支持32位系統,雖然我也在csdn找到別人從新編譯過的pycurl,可以在64位安裝,而後pyspider也確實安裝上去了,可是並不完美!!這裏說一下,不完美處就是沒法進行調試!!調試很重要吧?
抱着對pyspider的喜好,我就果斷的重裝系統了!
若是你是32位系統,就這樣安裝:python
pip install pycurl pip install pyspider
若是你是64位系統,且不是強迫症,可以接受不完美的事物,就這樣安裝:
下載從新編譯過的pycurl,而後安裝。
而後cmd輸入:pip install pyspider
web
on_start
@every(minutes=24 * 60) def on_start(self): self.crawl('http://movie.douban.com/tag/', callback=self.index_page)
這裏沒什麼講的,改個網址而已,callback就是調用下一個函數開始這個起始網頁。
5. 改動index_page函數
咱們先來看一下啓示網頁張怎樣?
有按類型分類,也有按國家/地區分類,還有按年代分類。咱們能夠選擇按國家/地區分類,也能夠選擇按年代分類,最好不選擇按類型分類,由於同一部電影既多是愛情片、又多是動做片(感受怪怪的)。我這裏選擇按年代分類。
先看一下index_page
我是怎麼改的。正則表達式
@config(age=10 * 24 * 60 * 60) def index_page(self, response): for each in response.doc('#content>div>div.article> table:nth-child(9)>tbody>tr>td>a').items(): a=each.attr.href.replace('www','movie') self.crawl(a,callback=self.list_page)
能夠看到咱們是從response.doc之中選擇tag的,而後 #content>div>div.article> table:nth-child(9)>tbody>tr>td>a
熟悉css selector的朋友可能會很熟悉這種東西,然而我是第一次接觸,因此講不出個因此然來。其實css selector跟正則表達式、xpath同樣,也是一種內容選擇的方法,而後也很好理解這是什麼意思。瀏覽器
這是分隔符,熟悉css selector的朋友能夠不用看下面的部分ruby
咱們先看一下
http://movie.douban.com/tag/
咱們要選擇的是201三、2012到1989這部份內容,那麼咱們右鍵選擇2013而後審查元素
而後在連接中右鍵選擇copy css path獲得一個而後複製到文本中,咱們選多幾個tag的css path,查看一下規律 能夠看到選中的幾個tag的css path不一樣點就在我紅線標出的地方,那麼咱們把他們的不一樣之處去掉,只留下相同的部分,也就是最下面的一行,把他複製下來,放到markdown
for each in response.doc('#content>div>div.article> table:nth-child(9)>tbody>tr>td>a').items()
括號裏面,告訴爬蟲,咱們要爬的部分在這個path下!
這就是一個獲得css path的方法,就連我這個第一次接觸css selector的人均可以找到
下面迴歸
接着是
a=each.attr.href.replace('www','movie') self.crawl(a,callback=self.list_page)
咱們先把符合上面css path規則的部分進行了替換,把www替換爲了movie。爲何這樣作呢?咱們分別打開
http://www.douban.com/tag/2013/?focus=movie
和
http://movie.douban.com/tag/2013/?focus=movie
來看。
能夠看到www的是沒有翻頁的!!!而movie的是有翻頁的!!!咱們要遍歷全部電影,固然要有翻頁了!!!因此這就是替換的緣由所在!
self.crawl(a,callback=self.list_page)
這段代碼就是把獲得的相似http://movie.douban.com/tag/2013?focus=movie的網頁交給了下一個函數去解析了!
@config(age=10*24*60*60) def list_page(self,response): #得到電影詳細內容連接並交給下一個函數處理 for each in response.doc('td > .pl2 > a').items(): self.crawl(each.attr.href,callback=self.detail_page) #翻頁,而後繼續由list_page函數處理 for each in response.doc('.next > a').items(): self.crawl(each.attr.href,callback=self.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函數
@config(priority=2) def detail_page(self, response): return { "url": response.url, "title":response.doc('* > * > div#wrapper > div#content > h1 > span').text(), "rate":response.doc('.rating_num').text(), "導演":response.doc('#info > span:nth-child(1) > span.attrs > a').text() }
這個就簡單了,已經到了電影詳細內容網頁,就看你要什麼內容,而後利用css selector helper進行選擇就能夠了!我這裏只返回了url、電影標題、評分和導演四項!
到這裏,爬蟲基本上寫完了,點擊save,返回dashboard,把爬蟲的狀態改爲Running或者debug,而後再點擊右方的run,爬蟲就啓動了!!
另外這裏還有不少的demo哦!http://demo.pyspider.org/
初體驗完畢!本人語文很差,講述得很差!只能利用大量圖片進行講述,若有不懂之處能夠評論。
轉載自:http://blog.csdn.net/u011659379/article/details/48223385