分布式的开发与运行流程

部署流程

  • 首先在master端(服务端),部署redis数据库、MySQL数据库等数据存储工具;
  • 然后在slaver端(分机端)部署分布式爬虫框架;
  • 注意点:在开发的时候首先要保证你的爬虫可以在单机系统下运行成功(数据爬取没问题,反爬也成功解决),然后再进行分布式部署

运行原理

  1. 把所有的分机(slaver)的爬虫运行起来,由于没有start_urls列表,所有分机爬虫现在都在等待start_urls的产生
  2. 通过服务器脚本把那些起始的url放入到“xxx:start_urls”这个redis键中
  3. 所有的slaver去竞争master端的start_urls中的url,一旦竞争到则立即进行爬取,没有竞争到url的slaver(分机)继续等待并监视start_urls和requestsl两个队列
  4. 所有分机如果对某个url访问成功则会把对应的url放入到去重队列dupefilter中,如果没有访问成功,则会启动爬虫本身的重传组件进行重传,多次都不成功,则把这个url重新加入到requests里面供其他人使用
  5. 爬取成功的爬虫通过分布式管道组件将爬取到的数据存入redis数据库的xxx:items这个key中,把爬虫过程中新产生的那些url放入到requests中
  6. 所有的监视requests的那些爬虫从其获取到url,进行爬取,周而复始,直至所有的url全部都进入到去重队列为止

分布式数据库

  • 数据库中有4个key
  • xxx:start_urls:
    起始url,在开启分布式爬虫的时候,所有的slaver端,会从这个key中去提取url(多台主机同时来竞争,竞争到url则发起请求,竞争不到等待),并且对提取到的url发起请求,然后会产生一些新的url,这些新产生的url会放入到xxx:requests这个key中,所有被访问过的start_urls中的url全部都会被删除掉,进入到dupefilter中
  • xxx:requests:
    用于盛放在爬虫运行的过程中新产生的那些url,所有的分布式系统中的slaver端除了竞争start_urls里面的url外,还会竞争requests里面的url,得到url以后发起请求,并且把请求完新产生的url放入到本队列中,同时把访问成功的url从这里删除掉并且放入到dupefilter中
  • xxx:items:
    用于存储爬虫过程中产生的待爬取数据
  • xxx:depefilter:
    存放已经成功爬取过的那些url,是一个去重列表;

你可能感兴趣的:(爬虫)