分布式爬虫

修改普通爬虫项目为分布式爬虫


1.主爬虫文件myspider.py 做如下修改,其他不做修改:

import scrapy
from ..items import MyItem # 导入数据模型
from scrapy_redis.spiders import RedisSpider #导入scrapy_redis模块

# 1.修改scrapy.spider为RedisSpider
class MySpider(RedisSpider):
    # 2.注释start_urls,添加redis_key
    redis_key = 'myspider:start_urls'

    ...

2.settings添加如下代码:

# 1.必须. 使用scrapy_redis的去重组件,在redis数据库里做去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 2.必须. 使用scrapy_redis的调度器,在redis里分配请求
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 3.可选. 在redis中保持scrapy-redis用到的各个队列,从而允许暂停和暂停后恢复,也就是不清理redis queues
SCHEDULER_PERSIST = True
# redis服务器地址
REDIS_HOST = "127.0.0.1"
# redis服务器端口
REDIS_PORT = 6379
# 管道存储,将数据存储到redis里
ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline':100
}

3.分发代码,选择一台机器作为服务器,切换到redis安装目录,修改配置文件参见,

如下命令开启 redis 数据库服务器


\> redis-server redis.windows.conf

4.客户端修改settings.py文件,将REDIS_HOST的值改为redis服务端的IP地址,

在服务端打开命令行终端输入如下命令查看IP地址:


\> ipconfig

或者在settings.py文件中添加如下代码指定服务器:


# 192.168.52.215 为服务器IP地址, 6397 为端口号
REDIS_URL='redis://root:@192.168.52.215:6379'

如果不在settings文件中指定服务器ip,客户端也可以在redis配置文件中绑定服务器IP地址:

bind 192.168.52.215  ----绑定服务器IP

5.运行客户端爬虫程序,控制台可看到程序处于等待状态中(服务器也可以开启爬虫程序,同样处于等待状态),

此时在服务器端再次打开一个终端,连接redis数据库并向其中添加初始url:

\> redis-cli

127.0.0.1:6379> lpush myspider:start_urls 
http://www.......

此时再次观察服务器终端,各个爬虫程序终端,可观察到程序正在爬取页面

6.爬取到了页面,那么就要进行读取查看,可使用Redis Desktop Manager 可视化工具连接数据库。

你可能感兴趣的:(Python)