Scrapy分布式爬虫
概念
scrapy分布式爬虫可以理解为在多台服务器(电脑)共同爬取数据,对于爬取的数据量很大的时候,建议使用分布式爬虫。在使用分布式爬虫过程中,往往还需要结合数据库,数据库会存储已爬取的数据,则不会再重复爬取。
Scrapy-redis分布式爬虫
第一步 (修改参数)
#在使用scrapy-redis分布式爬虫的时候,我们只需修改scrapy项目文件中的部分参数即可实现分布式爬虫
## settings.py文件 ##
#定义调度器 (新增)
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
#定义去重过滤器 (新增)
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
#设置redis连接 (新增)
REDIS_URL = "redis://:Redis的密码@带有Redis数据库的服务器地址:6379"
#修改ITEM_PIPELINES信息 (修改)
ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline':200}
## spider.py文件 (该文件名由自己创建爬虫的时候所生成的文件) ##
#导入scrapy_redis库中的RedisSpider类
from scrapy_redis.spiders import RedisSpider
#继承RedisSpider类,修改class HomeSpider(scrapy.Spider)
class HomeSpider(RedisSpider):
pass
第二步 (复制项目文件到每台服务器)
把scrapy项目文件里面部分参数修改好之后,只需把该项目文件放到服务器即可,并且在服务器使用命令scrapy crawl 爬虫名 ,启动爬虫,爬虫即可进入等待状态,因为我们还没有给爬虫初始url信息,所以爬虫会处于等待状态
第三步(在带有Redis数据库的服务器构建初始url信息)
一般Redis默认安装路径为C:\Program Files\Redis,只需打开redis-cli,输入命令构建信息,也就是爬虫初始url信息,该命令为lpush 爬虫名:start_urls 爬取的初始网址,输入完该命令,所有处于等待状态的爬虫将会共同爬取数据
lpush pyml:start_urls https://xxx.com
第四步(可选 数据可存进Mysql数据库里面)
#构建新的Pipeline,把数据存储进mysql里面
class MYSQLDBPipeline(object):
#爬虫启动时候构建连接mysql的信息
def open_spider(self,spider):
self.conn = pymysql.connect(host="127.0.0.1",user="root",passwd="root",database="data",port=3306)
self.cursorer = self.conn.cursor()
#把数据写入mysql里面
def process_item(self,item,spider):
self.cursorer.execute("insert into novel(name,author,type) values('{}','{}','{}')".format(item["name"],item["author"],item["type"]))
return item
#爬虫关闭时候关闭数据库连接并且提交数据
def close_spider(self,spider):
self.conn.commit()
self.conn.close()