sprapy分散式爬蟲簡要步驟
scrapy_redis:第三方庫實現分佈的部署
分散式爬蟲: 只需要在眾多電腦中, 選擇其中一臺開啟redis服務, 目的就是在redis中建立公用的queue和公用的set, 然後剩餘電腦只需要連線redis服務即可,剩餘電腦不需要開啟redis-server服務。
1>在虛擬環境中安裝pip install redis
2>去github上搜索scrapy_redis庫,解壓,儲存到專案根目錄下。根據提供的用例,配置我們的專案,大致三部分:
1.settings.py檔案;
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# ITEM_PIPELINES: 可設定也可不設定
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 300
}
# myroot: 自定義的redis連結。IP:開啟redis-server服務的這臺電腦的IP
REDIS_URL = 'redis://myroot:@本機ip:6379'
本機ip: 可通過在cmd中輸入命令ipconfig查詢
2.jobbole.py檔案;
from scrapy_redis.spiders import RedisSpider
class JobboleSpider(RedisSpider):
name = 'jobbole'
allowed_domains = ['jobbole.com']
# start_urls = ['http://blog.jobbole.com/all-posts/']
# 新增鍵
redis_key = 'jobbole:start_urls'
3.有關資料庫部分;
執行mysql -uroot -p 會提示mysql不是內部或外部命令--->需要將mysql.exe的路徑新增到環境變數中
(如果新增成功以後沒起作用,那就重啟電腦吧)
安裝MySQL的時候,預設生成的使用者root只有本地登入許可權localhost,如果需要遠端連線MySQL,需要分配一個擁有遠端連線許可權的新使用者。
第一步:通過mysql -uroot -p登入MySQL服務。
第二步:通過grant all privileges on *.* to 'myroot'@'%' identified by '123456';(注意一定要帶上分號)。
# *.* 表示所有資料庫中的所有表,都能夠被遠端連線
# '%' 表示任意IP都可以進行連結
# 'myroot' 具有遠端連結許可權的使用者名稱,自定義。之後就使用這個User進行連結資料庫
mysql->grant all privileges on *.* to 'myroot'@'%' identified by '123456'; 回車即可。
第三步:再去修改爬蟲專案中有關資料庫的配置。
MYSQL_HOST = '192.168.40.217'
MYSQL_DBNAME = 'article_db'
MYSQL_USER = 'myroot'
MYSQL_PASSWORD = '123456'
MYSQL_CHARSET = 'utf8'
注意: 需要自己建立一個新的資料庫連線
3>將配置好的專案,拷貝到不同的機器中;
4>選擇其中一臺機器,開啟redis-server服務,並修改redis.windows.conf配置檔案:
# 配置遠端IP地址,供其他的電腦進行連線redis
bind: (當前電腦IP) 192.168.40.217
# 關閉redis保護模式
protected-mode: no
(修改redis.windows-service.conf中的應該是也可以的)
可參考文件: Redis安裝解除安裝服務:https://www.cnblogs.com/oneTOinf/p/7928033.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
執行爬蟲專案:
可在scheduler.py中加斷點
啟動redis: redis-server --service-install redis.windows.conf