我目前正在编写一个web爬虫(使用python框架scrapy)。
最近我不得不实现一个暂停/恢复系统。
我实施的解决方案是最简单的方法,基本上,它们在计划时存储链接,并在它们实际存在时将其标记为“已处理”。
因此,当恢复蜘蛛时,我能够获取这些链接(显然,存储的内容比只包含URL,深度值,链接所属的域等等要多一些),至今一切正常好。存储爬虫状态的最优化方式?
现在,我刚刚使用了一个mysql表来处理这些存储操作,主要是为了快速建立原型。
现在我想知道如何优化这个,因为我认为数据库不应该是唯一可用的选项。通过优化,我的意思是,使用一个非常简单和轻的系统,同时仍然能够处理大量的短时间内写入的数据。
现在,它应该能够处理几十个域的抓取,这意味着存储几千链接第二...
预先感谢建议
数十个网站并行抓取,但我需要保留过去完成的每个抓取作业的跟踪,我猜 – Sylvain 2009-11-13 16:07:05
也是如果顺序写入文件,将如何我'下载链接'链接? – Sylvain 2009-11-13 18:51:29
@Sylvain,那么你肯定需要定期将内存后备“set”转储为更持久的查找形式 - 而Berkeley DB可能会或可能不会顺利地扩展到数百万或数十亿...你会需要进行基准测试,但是我怀疑PostgreSQL(或者一些雄心勃勃的非关系密钥/价值商店,但除了Google自己的Bigtable之外,我几乎没有经验),如果您的规模足够大,这的确是您最好的方法。关键的一点是,您无需一直更新该数据库 - 使用内存和日志可以使数据库更新“仅需一次”! – 2009-11-13 18:54:19