在进行分布式爬虫之前,最重要的莫过于部署框架和配置环境了,我使用的是scrapy框架和redis数据库,
同时也使用了他们两个的结合体scrapy-redis这个分布式的专有架构,在它们的安装和布置过程中,确实
费了我一段时间,然后对他们的了解和学习也经过了一段时间,因此我有了一定的安装和配置心得,当然
其中也有借鉴网上大神的一些,如下:
1.scrapy框架
一个制作爬虫的强大的框架,它的安装得提前安装这几个包:
windows系统中:我首先实在我电脑上的windows系统中安装的,费了我好几天才搞定,因为版本和配置调制
我的一个一个在网上查,在安装成功后,我也得到了一些心得:
安装顺序是: wheel->lxml->pyOpenSLL->Twisted->Scrapy
使用pip install 加上以上的包名字或者可以在网站上下载文件,然后安装。在配置pycharm的
时候会出现几个包的安装失败,尤其是Twisted费了我很长时间,需要进行版本的切换,试一试
Python2.6会更好。
linux系统中:我然后在我的第二个系统Linux中安装了scrapy框架,因为有了一些经验,而且这些包在linux系统中
安装都会自动调制,因此省了很多时间,一天就搞定了。最简单的莫过于在配置pycharm的时候,每
个包直接就安装成功,生了很长时间。
因此我建议大家使用Linux系统安装scrapy框架
在安装完成scrapy框架后我使用它进行了工程的建立,成功对几个网站数据进行了爬去,它的基本用法如下:
只需修改2个python文件。items.py 和spiders文件夹中的你自己建立的主要的一个python文件。
打开cmd:输入 scrapy startproject +(你需要创建的项目名字)
输入:cd +(你的项目名字)
输入:scrapy genspider +(你取的一个文件名这里用name代替) +(网站地址)
然后进入到文件里面的spider中的一个name 文件中写入你需要的代码,和需要爬取数据的代码
输入: scrapy crawl name -o name.csv
之后你就能在项目文件中找到一个csv文件,文件中就是你需要爬去的数据了。
是不是感觉scrapy功能很强大呢,确实,他给我们配置了所有需要的爬虫东西,只需要你对你需要爬去的站点进行配置,
对你需要爬去的数据进行配置,就可以了。
2.redis:
windows系统中: Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压
缩包到 C 盘,解压后,将文件夹重新命名为 redis。
打开一个 cmd 窗口 使用 cd 命令切换目录到 C:\redis 运行下列命令:
redis-server.exe redis.windows.conf
之后你会得到一个六边形的画面,说明你的redis安装成功了。这时候另启一个 cmd 窗口,原来的不要关闭,
不然就无法访问服务端了。
linux系统中: 直接试用一下命令即可安装成功,很简单。
$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make
make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,
两个程序位于安装目录 src 目录下:
下面启动redis服务.
下面启动redis服务.
$ cd src
$ ./redis-server
3.scrapy-redis:
scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单分布式爬虫程序,该组件本质上提供了三大功能:
scheduler - 调度器
dupefilter - URL去重规则(被调度器使用)
pipeline - 数据持久化
安装:安装scrapy-redis命令(https://github.com/rolando/scrapy-redis)
和scrapy相比较,scrapy-redis就是需要修改一下scrapy中的一部分文件,
1.spider 修改
class CgysSpider(scrapy.Spider):
name = ‘clispider’
start_urls = [‘https://search.bilibili.com/all?keyword=橙果医生’]
# 改成
from scrapy_redis.spiders import RedisSpider
class ClispiderSpider(RedisSpider):
name = ‘clispider’
redis_key = ‘cl5:start_urls’
2.setting.py修改
# 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
# 4(必须). 通过配置RedisPipeline将item写入key为 spider.name : items 的redis的list中,供后面的分布式处理item
# 这个已经由 scrapy-redis 实现,不需要我们写代码,直接使用即可
ITEM_PIPELINES = {
# 'AQI.pipelines.AqiJsonPipeline': 200,
# 'AQI.pipelines.AqiCSVPipeline': 300,
# 'AQI.pipelines.AqiRedisPipeline': 400,
# 'AQI.pipelines.AqiMongoPipeline': 500,
'scrapy_redis.pipelines.RedisPipeline': 100
}
# 5(必须). 指定redis数据库的连接参数
REDIS_HOST = "192.168.1.235"
REDIS_PORT = 6379
REDIS_PARAMS = {
"password": "KangCe@0608",
}
# 6.如果不启用则按scrapy默认的策略
# -1. 默认的 按优先级排序(Scrapy默认),由sorted set实现的一种非FIFO、LIFO方式。
# SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'
# -2. 可选的 按先进先出排序(FIFO)
# SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderQueue'
# -3. 可选的 按后进先出排序(LIFO)
# SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderStack'
# 7. LOG等级
#LOG_LEVEL = 'DEBUG'
在经过了一个多星期的努力和学习,我对这些框架和环境的配置掌握了,也对他们的用法和里面的
各种文件进行了了解,和文件中的代码进行了学习,对分布式爬虫也有了更加深入的了解,接下来就是
对从机的环境进行配置和对从机的连接,在之后的从机我准备使用虚拟机进行,最后就是分布式爬取了。