1準備 :redis數據庫,Python的scrapy-redis包,[mysql數據庫]redis安裝目錄下redis.windows.conf 配置文件修改bind 0.0.0.0[或局域網內,外網的IP地址]
protected-mode no
2配置scrapy settings文件設置設置
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 300,
# '其他'
}
REDIS_HOST = '192.168.216.94'
REDIS_PORT = 6379
[如果需要密碼則REDIS_PASSWORD=""]
3修改Spider 文件:
spider 文件裏導入from scrapy_redis.spiders import RedisSpider,並且讓爬蟲類繼承RedisSpider
取消start_urls,並在spider文件中設置redis_key ='你的redis的表名'
class JobboleSpider(RedisSpider):
name = 'jobbole'
allowed_domains = ['jobbole.com']
# start_urls = ['http://blog.jobbole.com/all-posts/']
# lpush jobbole:start_urls http://blog.jobbole.com/all-posts/
redis_key = 'jobbole:start_urls'
4.運行
開啓服務(如沒配置redis環境變量需進入redis安裝目錄下)shift鍵+鼠標右鍵打開命令行,輸入redis-server redis.windows.conf
如啓動時遇見錯誤可以試一下redis-cli(如果bind的是127.0.0.1就可以不需要-h參數,其他地址就不行,如果) 然後shutdown,再次redis-server redis.windows.conf啓動服務。
換其他機器測試(其他機器不必打開redis服務)cmd下redis-cli -h IP,連接成功表示成功,然後傳輸源代碼,如果cmd能連接上redis但是運行scrapy時候卻報類似"拒絕"這種服務可以先檢查settings中redis的參數是否是因爲沒有密碼而有中括號中的redis://[root@IP:port].如果沒密碼去掉中括號內的字符即可。
(如果需要配置遠程mysql服務器的話需要現在mysql中設置一個可以遠程登錄的賬號:創建用戶create user myroot identified by '123456';賦予權限grant all privileges on *.* to 'myroot'@'%';)
開啓所有爬蟲,如爬蟲有類似"Telnet 127.0.0.1"字段則已成功大半,然後連接redis主機的redis服務器lpush jobbole:start_urls(spider中的redis_key) http://blog.jobbole.com/all-posts/(原本存放start_urls的地址),如果存入數據庫後爬蟲開始進行爬取,則成功。
注意:如果只是測試代碼的連通性,則每次運行完畢之後都要刪除dedis中的表del 表名即可,查詢所有表名的命令keys *.
分佈式爬蟲單機運行爬蟲(只有一個服務器運行)原因:下次更新