Distribute_crawler

使用scrapy,redis, mongodb,graphite实现的一个分布式网络爬虫,底层存储mongodb集群,分布式使用re
Alternatives To Distribute_crawler
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Mall71,773
5 days ago40apache-2.0Java
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
Interview_internal_reference34,839
6 months ago30Python
2023年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总。
Springboot Learning Example15,343
8 months ago52apache-2.0Java
spring boot 实践学习案例,是 spring boot 初学者及核心技术巩固的最佳实践。
Nodebb13,65934a day ago6December 12, 2016140gpl-3.0JavaScript
Node.js based forum software built for the modern web
Mall Learning12,417
15 days ago27apache-2.0Java
mall学习教程,架构、业务、技术要点全方位解析。mall项目(50k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。
Mall Swarm10,846
18 days ago25apache-2.0Java
mall-swarm是一套微服务商城系统,采用了 Spring Cloud 2021 & Alibaba、Spring Boot 2.7、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。文档齐全,附带全套Spring Cloud教程。
Crawlab10,346
a month ago1March 03, 201961bsd-3-clauseGo
Distributed web crawler admin platform for spiders management regardless of languages and frameworks. 分布式爬虫管理平台,支持任何语言和框架
Coolify9,718
a day ago41apache-2.0PHP
An open-source & self-hostable Heroku / Netlify / Vercel alternative. Cloud version available here -> https://app.coolify.io
Winds8,486
2 years agobsd-3-clauseJavaScript
A Beautiful Open Source RSS & Podcast App Powered by Getstream.io
Machinery7,036642 months ago9April 13, 2021225mpl-2.0Go
Machinery is an asynchronous task queue/job queue based on distributed message passing.
Alternatives To Distribute_crawler
Select To Compare


Alternative Project Comparisons
Readme

distribute_crawler

使用scrapy,redis, mongodb,graphite实现的一个分布式网络爬虫,底层存储mongodb集群,分布式使用redis实现, 爬虫状态显示使用graphite实现。

这个工程是我对垂直搜索引擎中分布式网络爬虫的探索实现,它包含一个针对http://www.woaidu.org/ 网站的spider, 将其网站的书名,作者,书籍封面图片,书籍概要,原始网址链接,书籍下载信息和书籍爬取到本地:

  • 分布式使用redis实现,redis中存储了工程的request,stats信息,能够对各个机器上的爬虫实现集中管理,这样可以 解决爬虫的性能瓶颈,利用redis的高效和易于扩展能够轻松实现高效率下载:当redis存储或者访问速度遇到瓶颈时,可以 通过增大redis集群数和爬虫集群数量改善。
  • 底层存储实现了两种方式:
    • 将书名,作者,书籍封面图片文件系统路径,书籍概要,原始网址链接,书籍下载信息,书籍文件系统路径保存到mongodb 中,此时mongodb使用单个服务器,对图片采用图片的url的hash值作为文件名进行存储,同时可以定制生成各种大小尺寸的缩略 图,对文件动态获得文件名,将其下载到本地,存储方式和图片类似,这样在每次下载之前会检查图片和文件是否曾经下载,对 已经下载的不再下载;
    • 将书名,作者,书籍封面图片文件系统路径,书籍概要,原始网址链接,书籍下载信息,书籍保存到mongodb中,此时mongodb 采用mongodb集群进行存储,片键和索引的选择请看代码,文件采用mongodb的gridfs存储,图片仍然存储在文件系统中,在每次下载 之前会检查图片和文件是否曾经下载,对已经下载的不再下载;
  • 避免爬虫被禁的策略:
    • 禁用cookie
    • 实现了一个download middleware,不停的变user-aget
    • 实现了一个可以访问google cache中的数据的download middleware(默认禁用)
  • 调试策略的实现:
    • 将系统log信息写到文件中
    • 对重要的log信息(eg:drop item,success)采用彩色样式终端打印
  • 文件,信息存储:
    • 实现了FilePipeline可以将指定扩展名的文件下载到本地
    • 实现了MongodbWoaiduBookFile可以将文件以gridfs形式存储在mongodb集群中
    • 实现了SingleMongodbPipeline和ShardMongodbPipeline,用来将采集的信息分别以单服务器和集群方式保存到mongodb中
  • 访问速度动态控制:
    • 跟据网络延迟,分析出scrapy服务器和网站的响应速度,动态改变网站下载延迟
    • 配置最大并行requests个数,每个域名最大并行请求个数和并行处理items个数
  • 爬虫状态查看:
    • 将爬虫stats信息(请求个数,文件下载个数,图片下载个数等)保存到redis中
    • 实现了一个针对分布式的stats collector,并将其结果用graphite以图表形式动态实时显示
  • mongodb集群部署:在commands目录下有init_sharding_mongodb.py文件,可以方便在本地部署

需要的其他的库

  • scrapy(最好是最新版)
  • graphite(针对他的配置可以参考:statscol/graphite.py)
  • redis
  • mongodb

可重用的组件

  • 终端彩色样式显示(utils/color.py)
  • 在本地建立一个mongodb集群(commands/init_sharding_mongodb.py),使用方法:
   sudo python init_sharding_mongodb.py --path=/usr/bin
  • 单机graphite状态收集器(statscol.graphite.GraphiteStatsCollector)
  • 基于redis分布式的graphite状态收集器(statscol.graphite.RedisGraphiteStatsCollector)
  • scrapy分布式处理方案(scrapy_redis)
  • rotate user-agent download middleware(contrib.downloadmiddleware.rotate_useragent.RotateUserAgentMiddleware)
  • 访问google cache的download middleware(contrib.downloadmiddleware.google_cache.GoogleCacheMiddleware)
  • 下载指定文件类型的文件并实现避免重复下载的pipeline(pipelines.file.FilePipeline)
  • 下载制定文件类型的文件并提供mongodb gridfs存储的pipeline(pipelines.file.MongodbWoaiduBookFile)
  • item mongodb存储的pipeline(pipelines.mongodb.SingleMongodbPipeline and ShardMongodbPipeline)

使用方法

#mongodb集群存储

  • 安装scrapy
  • 安装redispy
  • 安装pymongo
  • 安装graphite(如何配置请查看:statscol/graphite.py)
  • 安装mongodb
  • 安装redis
  • 下载本工程
  • 启动redis server
  • 搭建mongodb集群
      cd woaidu_crawler/commands/
      sudo python init_sharding_mongodb.py --path=/usr/bin
  • 在含有log文件夹的目录下执行:
      scrapy crawl woaidu
  • 打开http://127.0.0.1/ 通过图表查看spider实时状态信息
  • 要想尝试分布式,可以在另外一个目录运行此工程

#mongodb

  • 安装scrapy
  • 安装redispy
  • 安装pymongo
  • 安装graphite(如何配置请查看:statscol/graphite.py)
  • 安装mongodb
  • 安装redis
  • 下载本工程
  • 启动redis server
  • 搭建mongodb服务器
      cd woaidu_crawler/commands/
      python init_single_mongodb.py 
  • 设置settings.py:
      ITEM_PIPELINES = ['woaidu_crawler.pipelines.cover_image.WoaiduCoverImage',
          'woaidu_crawler.pipelines.bookfile.WoaiduBookFile',
          'woaidu_crawler.pipelines.drop_none_download.DropNoneBookFile',
          'woaidu_crawler.pipelines.mongodb.SingleMongodbPipeline',
          'woaidu_crawler.pipelines.final_test.FinalTestPipeline',]
  • 在含有log文件夹的目录下执行:
      scrapy crawl woaidu
  • 打开http://127.0.0.1/ (也就是你运行的graphite-web的url) 通过图表查看spider实时状态信息
  • 要想尝试分布式,可以在另外一个目录运行此工程

注意

每次运行完之后都要执行commands/clear_stats.py文件来清除redis中的stats信息

     python clear_stats.py

Screenshots

graphite book_files book_files images terminal

Popular Mongodb Projects
Popular Redis Projects
Popular Data Storage Categories

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Python
Mongodb
Redis
Crawler
Spider
Scrapy
Graphite
Sharding