1. 程式人生 > >初步瞭解爬蟲框架pyspider

初步瞭解爬蟲框架pyspider

本文只對pyspider的簡單使用作一介紹,有關pyspider的詳細使用請看:點選開啟連結

        在開始之前,我們先來看一下pyspider的架構:pyspider的架構主要分為Scheduler(排程器),Fetcher(抓取器),Processer(處理器)3個部分,整個爬取過程受到Monitor(監控器)的監控,抓取的結果被Result Worker(結果處理器)處理,Scheduler發起任務排程,Fetcher負責抓取網頁內容,Processer負責解析網頁內容,將生成的提取結果輸出儲存。

1.安裝:pip install pyspider

驗證安裝:pyspider all,安裝完成之後,控制檯會有如下的輸出:


上面的命令意思就是啟動pyspider的所有元件,可以看到最後一行輸出的是webui介面在5000埠執行的意思,這時我們開啟本地的5000埠(http://localhost:5000),看到的就是pyspider的webui介面,如圖:


2.點選create,建立一個新的專案,名字隨便取,開始的連結寫你要抓取的網頁的連結,完成之後進入如圖的頁面:


        可以看到pyspider的專案編輯和除錯頁面:如上圖,左側就是程式碼的除錯頁面,點選左側上角的run單步除錯爬蟲程式,在左側下半部分可以預覽當前的爬取頁面。右側是程式碼編輯頁面,可以直接編輯程式碼和儲存程式碼。而且,當你建立成功一個專案的時候,pyspider自己會幫我們生成一段程式碼,如下圖(我填寫的專案URL是百度):

from pyspider.libs.base_handler import *


class Handler(BaseHandler):
    crawl_config = {
    }

    @every(minutes=24 * 60)
    def on_start(self):
        self.crawl('http://www.baidu.com', callback=self.index_page)

    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        for each in response.doc('a[href^="http"]').items():
            self.crawl(each.attr.href, callback=self.detail_page)

    @config(priority=2)
    def detail_page(self, response):
        return {
            "url": response.url,
            "title": response.doc('title').text(),
        }

3.分析程式碼邏輯:

        這裡的handler就是pyspider爬蟲的主類,我們可以在此處定義爬取,解析儲存的邏輯。整個爬蟲的功能只需要一個Handler即可完成。接下來,我們可以看到一個crawl_config屬性。我們可以將本專案中的所有爬取配置統一定義在這裡,配置之後全域性生效。然後,on_start()方法是爬取入口,該方法通過調取crawl()方法即可新建一個爬取請求:,第一個引數是爬取的url,它會自動的替換成為我們定義的url,還有一個引數是callback,指定了這個頁面爬取成功後會使用哪個方法進行解析,程式碼中指定為index_page()。index_page()方法解析了上一個請求的頁面的所有連結,然後將連結遍歷,再次呼叫crawl()方法生成了新的爬取請求,同時指定了callback為detail_page(),意思是說這些頁面爬取成功後就呼叫了detail_page()方法。detail_page()抓取的是詳情頁的資訊,就不會生成新的請求,只對上一步得到的新的爬取請求做解析,解析之後將結果以字典的形式返回。

        通過對程式碼的分析,我們可以知道,當我們爬取一個網頁的時候,我們可以分為以下幾個步驟來進行:第一步,爬取首頁,對應的就是on_start()方法,之後爬取首頁中的連結,對應的是index_page()方法,最後則是解析詳情頁,提取出我們所需要的資訊,對應的是detail_page()方法。