天天看點

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

既然這麼好能實作分布式爬取,那都需要準備什麼呢?

需要準備的東西比較多,都有:

- scrapy

- scrapy-redis

- redis

- python的mysqldb子產品

- python的redis子產品

為什麼要有mysql呢?是因為我們打算把收集來的資料存放到mysql中

redis:

pip install redis

這樣就是最簡單的了。

先來看下scrapy-redis的一些不同的地方。

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

首先就是class的父對象變了,變成了特有的redisspider,這是scrapy-redis裡面自己定義的新的爬蟲類型。其次就是不再有start_urls了,取而代之的是redis_key,scrapy-redis将key從list中pop出來成為請求的url位址。

我們這次選取的對象是58同城的平闆電腦資訊。

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

scrapy.cfg檔案我們可以不管,readme.rst檔案也不管(這個是github上有用的,scrapy建立項目的時候并沒有)

pbdnof58檔案夾内的結構:

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

items定義檔案,settings設定檔案,pipelines處理檔案以及spiders檔案夾。

spiders檔案夾盛放着我們編寫的具體爬蟲:

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

可以看到裡面有2個爬蟲,一個是用來爬所有的url位址,并将其傳遞給redis。而另外一個則是根據爬取出來的位址處理具體的商品資訊。

具體來看。首先是settings.py檔案。

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

跟scrapy一樣,寫明spider的位置。

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

2個處理資料的pipeline中的類,數字越小優先執行。

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

因為資料要存放在mysql中,是以需要配置下mysql的資訊。而redis是預設采用本地的,是以并沒有配置資訊,如果是連接配接别的主機的話,需要配置下redis的連接配接位址。

item.py檔案

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

與scrapy相比多了個排程檔案,多了個itemloader類,照着做就好了,itemloader類後面會用到的。

pipeline.py檔案

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

最重要的是這個将結果存儲到mysql中。

要在一個名為qcl的資料庫之中建一個名叫58pbdndb的表。qcl對應settings的配置。

注意:我并沒有在表的一開始檢查字段是否存在,如果你在調試過程中不止一次的話,你可能需要多次删除表中資料。

58urlspider.py檔案

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

這個爬蟲實作了2個功能。1是如果next(也就是下一頁)存在,則把下一頁的位址壓進redis的myspider:58_urls的這個list中,供自己繼續爬取。2是提取出想要爬取的商品具體網址,壓進redis的myspider:start_urls的list中,供另一個爬蟲爬取。

58spider-redis.py檔案

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

這個爬蟲是用來抓取具體的商品資訊。可以看到itemloader類的add_path和add_value方法的使用。

運作方法跟scrapy相同,就是進入pbdnof58檔案夾下(注意下面是隻有spiders檔案夾的那個).輸入

可以輸入多個來觀察多程序的效果。。打開了爬蟲之後你會發現爬蟲處于等待爬取的狀态,是因為2個list此時都為空。是以需要

來設定一個初始位址,好啦,這樣就可以愉快的看到所有的爬蟲都動起來啦。

最後來張資料庫的圖

scrapy-redis 建構分布式爬蟲,此片文章有問題。不要用 此篇文章為轉載,隻供學習,有很多問題,如沒有解決分布式去重問題。最好還是用scrapy-redis給出的例子代碼 前言 準備 動工 最後

本文相對比較簡單,隻是scrapy-redis的基本應用。本人也比較小白,剛剛開始學習,如有什麼問題,歡迎提出來共同進步。