天天看点

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

既然这么好能实现分布式爬取,那都需要准备什么呢?

需要准备的东西比较多,都有:

- scrapy

- scrapy-redis

- redis

- python的mysqldb模块

- python的redis模块

为什么要有mysql呢?是因为我们打算把收集来的数据存放到mysql中

redis:

pip install redis

这样就是最简单的了。

先来看下scrapy-redis的一些不同的地方。

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

首先就是class的父对象变了,变成了特有的redisspider,这是scrapy-redis里面自己定义的新的爬虫类型。其次就是不再有start_urls了,取而代之的是redis_key,scrapy-redis将key从list中pop出来成为请求的url地址。

我们这次选取的对象是58同城的平板电脑信息。

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

scrapy.cfg文件我们可以不管,readme.rst文件也不管(这个是github上有用的,scrapy创建项目的时候并没有)

pbdnof58文件夹内的结构:

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

items定义文件,settings设置文件,pipelines处理文件以及spiders文件夹。

spiders文件夹盛放着我们编写的具体爬虫:

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

可以看到里面有2个爬虫,一个是用来爬所有的url地址,并将其传递给redis。而另外一个则是根据爬取出来的地址处理具体的商品信息。

具体来看。首先是settings.py文件。

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

跟scrapy一样,写明spider的位置。

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

2个处理数据的pipeline中的类,数字越小优先执行。

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

因为数据要存放在mysql中,所以需要配置下mysql的信息。而redis是默认采用本地的,所以并没有配置信息,如果是连接别的主机的话,需要配置下redis的连接地址。

item.py文件

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

与scrapy相比多了个调度文件,多了个itemloader类,照着做就好了,itemloader类后面会用到的。

pipeline.py文件

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

最重要的是这个将结果存储到mysql中。

要在一个名为qcl的数据库之中建一个名叫58pbdndb的表。qcl对应settings的配置。

注意:我并没有在表的一开始检查字段是否存在,如果你在调试过程中不止一次的话,你可能需要多次删除表中数据。

58urlspider.py文件

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

这个爬虫实现了2个功能。1是如果next(也就是下一页)存在,则把下一页的地址压进redis的myspider:58_urls的这个list中,供自己继续爬取。2是提取出想要爬取的商品具体网址,压进redis的myspider:start_urls的list中,供另一个爬虫爬取。

58spider-redis.py文件

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

这个爬虫是用来抓取具体的商品信息。可以看到itemloader类的add_path和add_value方法的使用。

运行方法跟scrapy相同,就是进入pbdnof58文件夹下(注意下面是只有spiders文件夹的那个).输入

可以输入多个来观察多进程的效果。。打开了爬虫之后你会发现爬虫处于等待爬取的状态,是因为2个list此时都为空。所以需要

来设置一个初始地址,好啦,这样就可以愉快的看到所有的爬虫都动起来啦。

最后来张数据库的图

scrapy-redis 构建分布式爬虫,此片文章有问题。不要用 此篇文章为转载,只供学习,有很多问题,如没有解决分布式去重问题。最好还是用scrapy-redis给出的例子代码 前言 准备 动工 最后

本文相对比较简单,只是scrapy-redis的基本应用。本人也比较小白,刚刚开始学习,如有什么问题,欢迎提出来共同进步。