分布式:说白了就是你一个人写一万行代码累死了时间太长,这个时候要是多几个人帮你一起写,这样不仅轻松了很多,而且时间也节省,下面上图解释吧
s1、先装redis的支持包:
pip install scrapy-redis
然后创建爬虫项目
scrapy startproject tieba #创建一个名为tieba的项目文件
cd tieba #进入这个tieba文件
scrapy genspider tb tieba.com #创建爬虫文件为tb 且域名为tieba.com 说白了就是我们准备爬取的目标
2、到项目中来:
3、在setting中设置路径
4、这里把true改成false,把用户代理放开,默认是注释着的。
5、现在开始写我们的蜘蛛
6、写一下我们的主机(我这里是用了一个简单的for将要爬取的目标url存放进了redis里面,以实现分布式,说白了就是我这个redis在这里放着,你们过来拿url再进行具体的业务逻辑爬虫即可)
7、这个时候记得配置一下redis的配置文件
protected-mode参数是为了禁止外网访问redis,如果启用了,则只能够通过lookback ip(127.0.0.1)访问Redis,如果外网访问redis,会报出异常,默认是protected-mode yes,他在这里起了一个保护模式的作用,所以我们要改成no
Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,设置为no
重启redis服务器
修改文件后,为了确保文件生效,我们要用命令
redis-server.exe C:\Users\Administrator\Desktop\Redis-x64-3.2.100\redis.windows.conf
redis-server.exe后面写的是你的配置文件的全路径
开始爬了睁大眼:
在这里我先是往redis里面添加了有限的几条url,然后再运行爬虫,可以看到爬虫动起来了,但是中间阻塞了,后来我再添加url,爬虫又开始动起来了,是这么回事的,在我们的redis里面存放着的数据在被取出去之后,就没了,这个是框架的威力,此时redis里面的数据被取完了,但是不能因为暂时没有数据就把我们的爬虫程序给停掉,而是阻塞状态,一旦redis里面有数据了就接着取,最终我们爬虫的url被写入文件。