需求:
爬取有不同网站的不同栏目,爬虫需要控制好不同网站、不同栏目、不同页码、不同内容也的爬取进度。
爬虫做成分布式爬虫架构,可以无限在不同电脑服务器上横向增加。
这个是我自己的业余项目,用 Node 写,想做成一个分布式爬虫框架,大概设计思路:
在 Redis 中有两个列表:爬虫列表、任务列表;
不同电脑(服务器)上的爬虫启动后,
( 1 )将自己相关信息 push 到爬虫列表(这个列表暂时只是为了查看爬虫信息),
( 2 )读取任务列表
如果没有的话根据规则,自己启动任务,同时生成一个任务,push 到任务列表(这里是先把下一个任务 push 过去,再执行自己的抓取任务,因此不会阻塞)。
如果任务列表中存在任务,则 POP 该任务后再生成下一个任务 Push 上去。
在每台电脑(服务器)上的爬虫都是一模一样的,有个模块专门针对不同网站、不同栏目生成任务规则,取到任务后才交给不同的逻辑模块处理数据。
任务列表中的任务顺序可能是不同网站的不同栏目,这样是为了避免单一 IP 对同一网站访问太频繁。
目前这种设计有个缺点就是得等一个爬虫拉取任务后才能生成下一个任务,而假如一个爬虫出问题,可能就无法生成下一个任务,导致其他爬虫也在白等,失去了任务调度的意义。
之所以要 push 下一个任务上去,是因为下一个任务要根据当前页面的爬取结果确定下一个任务(比如爬到这一页发现数据已经不再爬过,不再爬取下一页)。
大家对这个东西有没有什么优化思路?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.