天天看點

pyspider的使用

你還應該至少對網際網路是什麼有一個簡單的認識:

是以,爬網頁實際上就是:

找到包含我們需要的資訊的網址(url)清單

通過 http 協定把頁面下載下傳回來

從頁面的 html 中解析出需要的資訊

找到更多這個的 url,回到 2 繼續

既然我們要爬所有的電影,首先我們需要抓一個電影清單,一個好的清單應該:

包含足夠多的電影的 url

通過翻頁,可以周遊到所有的電影

一個按照更新時間排序的清單,可以更快抓到最新更新的電影

<a target="_blank" href="http://movie.douban.com/tag/">http://movie.douban.com/tag/</a>

在 pyspider 的 dashboard 的右下角,點選 "create" 按鈕

pyspider的使用

替換 <code>on_start</code> 函數的 <code>self.crawl</code> 的 url:

<code>self.crawl</code> 告訴 pyspider 抓取指定頁面,然後使用 <code>callback</code> 函數對結果進行解析。

點選綠色的 <code>run</code> 執行,你會看到 <code>follows</code> 上面有一個紅色的 1,切換到 <code>follows</code> 面闆,點選綠色的播放按鈕:

pyspider的使用
由于 電影清單頁和 tag清單頁長的并不一樣,在這裡建立了一個 <code>callback</code> 為 <code>self.list_page</code> <code>@config(age=10 * 24 * 60 * 60)</code> 在這表示我們認為 10 天内頁面有效,不會再次進行更新抓取

由于 pyspider 是純 python 環境,你可以使用 python 強大的内置庫,或者你熟悉的第三方庫對頁面進行解析。不過更推薦使用 css選擇器。

再次點選 <code>run</code> 讓我們進入一個電影清單頁(<code>list_page</code>)。在這個頁面中我們需要提取:

下一頁的連結,用來翻頁

在 pyspider 中,還内置了一個 <code>css selector helper</code>,當你點選頁面上的元素的時候,可以幫你生成它的 css選擇器 表達式。你可以點選

<code>enable css selector helper</code> 按鈕,然後切換到 <code>web</code> 頁面:

pyspider的使用

開啟後,滑鼠放在元素上,會被黃色高亮,點選後,所有擁有相同 css選擇器 表達式的元素會被高亮。表達式會被插入到 python 代碼目前光标位置。建立下面的代碼,将光标停留在單引号中間:

點選一個電影的連結,css選擇器 表達式将會插入到你的代碼中,如此重複,插入翻頁的連結:

翻頁是一個到自己的 <code>callback</code> 回調

再次點選 <code>run</code>,follow 到詳情頁。使用 <code>css selector helper</code> 分别添加電影标題,打分和導演:

pyspider的使用

右鍵點選需要提取的元素,點選審查元素。你并不需要像自動生成的表達式那樣寫出所有的祖先節點,隻要寫出那些能區分你不需要的元素的關鍵節點的屬性就可以了。不過這需要抓取和網頁前端的經驗。是以,學習抓取的最好方法就是學會這個頁面/網站是怎麼寫的。

你也可以在 chrome dev tools 的 javascript console 中,使用 <code>$$(a[rel="v:directedby"])</code> 測試 css selector。

使用 <code>run</code> 單步調試你的代碼,對于用一個 <code>callback</code> 最好使用多個頁面類型進行測試。然後儲存。

回到 dashboard,找到你的項目

将 <code>status</code> 修改為 <code>debug</code> 或 <code>running</code>

按 <code>run</code> 按鈕

pyspider的使用