原理
分布式redis数据库中有4个key
- xxx:start_urls:用于向分布式系统提供起始url
- xxx:requests:用于盛放在爬虫运行的过程中新产生的那些请求对象
- xxx:items:用于存储爬虫爬取的数据
- xxx:dupefilter:用于盛放已经被访过的那些请求对象
分布式爬虫的运行过程
- 把所有的分机(slaver端)上的爬虫运行起来,由于没有start_urls,所有的分机都在等待起始url的产生
- 通过服务器脚本把那些起始的url放入到xxx:start_urls列表中
- 所有的slaver去竞争master端的xxx:start_urls中的起始url,一旦竞争到url则开启爬虫,没有竞争到slaver端继续监视xxx:start_urls和xxx:requests这两个列表
- 所有的分机如果对某个url访问成功则会把这个url加入去重列表中(即xxx:dupefilter),如果没有访问成功则会启动重传机制,如果再不成功就会这个url返回给requests列供其他slaver来使用
- 爬取成功的数据会通过管道组件存入到redis数据库的xxx:items列表中,并且把该页面新产生的url加入到xxx:requests列表中
- 如果所有的url都被取完(start_urls和requests两个列表都为空),则所有的slaver端都会暂停等待