1. 程式人生 > >sprapy分散式爬蟲簡要步驟

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