python 爬虫——部署scrapy-redis分布式爬虫及部署分布式爬虫后但是只能单机运行原因

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 *.

分布式爬虫单机运行爬虫(只有一个服务器运行)原因:下次更新