1. 程式人生 > >小白的scrapy入門之路(二)

小白的scrapy入門之路(二)

       上次我們爬取了菜鳥教程的Python頁面,很簡單的一個小專案對不對。這次我們來玩點更有意思的東西,就是讓爬蟲自己識別、自己去爬。

    聽上去是不是高階大氣上檔次,小編剛學的時候也覺得高階大氣上檔次。爬蟲會自己自動去爬取資料,是不是很像AI。好了,說了那麼多廢話,下面進入我們今天的正題吧。

  首先,今天我們要爬取的是指令碼之家。我們可以百度一下,找到指令碼之家的網站,如果瀏覽器有開發者工具的話,直接按F12,彈出除錯框,我們就可以看到網站的結構了。上次我們爬的只是一小部分的頁面,這次我們來玩次大的,爬取整個網站。小編這次用的是Scrapy給我們提供的CrawlSpider,即通用蜘蛛。同時,Scrapy還給我們提供了CSVspider,XMLspider等等。具體用法,請自行百度一下scrapy的官方文件,如果英文不好,可以看中文文件噢。

  下面我們先寫好我們的Item.py:

這次我們使用的還是ItemLoader,為什麼小編喜歡用ItemLoader呢?因為懶嘛,還有的是這樣蜘蛛的程式碼會非常整潔並且容易理解。資料處理的東西就可以放在pipeline或者items.py裡面做了。寫好了Item之後,後面就到我們的蜘蛛了:

是不是很簡潔,下面小編簡單說說蜘蛛吧。像我們所看到的一樣,我們只需要把繼承改成CrawlSpider,加上rules就可以了是不是很簡單。實際上我們還是要了解一下它是怎麼做到的。首先是例項化了一個Rule的物件,也就是網頁提取的規則。而其次就是例項化了LinkExtractor的物件,用於匹配你想要蜘蛛去爬的網頁url。最後就是follow和callback了。follow就是我們讓不讓蜘蛛做進一步的跟蹤。callback就是提取了這些東西后要交給誰去處理。這樣我們就簡單的介紹完了crawlspider的使用了。下面就到我們的pipeline了,pipeline我們還是採用上次的pipeline,將資料非同步寫入資料庫。

寫完了pipeline,只要我們在設定中新增所要的引數就可以爬取了,例如資料庫的那些引數,和使用者代理(User-Agent)。不過這麼容易滿足不了小編的求知慾,所以小編做了新的嘗試,使用者代理池。

我們新建一個py檔案,裡面放所需要的使用者代理的值,百度上都有。然後我們改寫我們的中介軟體。Scrapy給我們提供了兩個中介軟體,一個是蜘蛛中介軟體,一個是下載中介軟體。這次我們要改寫的是一個下載的中介軟體,我們繼承的是scrapy原有的User-Agent的中介軟體。

只要簡單的幾行的匯入和幾行的程式碼,我們的中介軟體就寫好了。最後只要在設定檔案裡面把scrapy原有的USER-AGENT的中介軟體設定None,把我們自己寫的中介軟體新增上去就可以了。這樣我們的爬蟲就寫好了,是不是很簡單。哈哈。

下面看看我們爬到的資料吧,因為資料太多,我就不全部展示了。

小編也就爬了10來萬的資料,然後小編就關掉了。首先是因為單一主機爬取比較慢,其次呢,小編比較懶,不想偷偷地透露下次小編要搞的新奇玩意。

好了,小編的小白scrapy入門之路,今天就到這了。歡迎各位大神批評指正,讓小編能夠更好地成長。