分布式爬虫

Posted louyifei0824

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式爬虫相关的知识,希望对你有一定的参考价值。

如何实现分布式爬虫

  • scrapy的url队列存在哪里? (单机内存)

  • redis是支持分布式的内存数据库

  • 可以为scrapy做一个新的调度器(redis),替换scapy的默认调度器, 从而实现分布式功能。

scrapy-redis

  • scrapy-redis是scrapy的一个组件(插件),和 scrapy、redis配合。从而实现支持分布式爬虫

  • 负责分布式爬虫的任务调度

  • 依赖于Scrapy和redis。

  • 主要组件:Scheduler、Dupefilter、Pipeline和Spider。

【没有使用分布式的时候】

url存在本机内容中,如: start_urls= [‘http://www.dushu.com‘ ] yield scrapy.Request(url)

【使用分布式的时候】

没有了start_urls, 而是使用redis_key,

url存在redis中 命令行执行:redis-cli lpush myspider:start_urls ‘http://www.xxx.com‘ 或者使用脚本执行: rds =Redis(‘127.0.0.1‘,6379)  rds.lpush(...)

技术分享图片

搭建分布式

master服务器的配置

  1. 安装scrapy、scrapy-redis、redis。

  2. 修改master的redis配置文件redis.conf:

    1)将 bind 127.0.0.1 修改为bind 0.0.0.0。(注意防火墙设置)

  3. 重启redis-server
  4. 在爬虫项目文件settings.py中添加配置信息
REDIS_HOST = localhost
REDIS_PORT = 6379

slave端的配置

  1. 在爬虫项目的settings.py文件中配置
REDIS_URL = redis://redis_server ip:6379

master和slave端中共同的配置

在settings.py中启用redis存储

ITEM_PIPELINES = {
    scrapy_redis.pipelines.RedisPipeline: 400,
}

运行分布式爬虫

# scrapy runspider myspider_redis.py
scrapy crawl myspider
redis-cli -h redis_server_ip 
redis-cli> lpush myspider_redis:start_urls http://www.xxxxxx.com/aaa/

详细参考官方文档:https://github.com/rmax/scrapy-redis

以上是关于分布式爬虫的主要内容,如果未能解决你的问题,请参考以下文章

solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例

使用Docker Swarm搭建分布式爬虫集群

使用Docker Swarm搭建分布式爬虫集群

爬虫 - scrapy-redis分布式爬虫

爬虫--Scrapy-CrawlSpider&分布式爬虫

程序源代码开源的Java垂直爬虫框架