我有一个网络爬虫,它可以查找我想要的特定信息并返回它。这是每天运行的。
问题是我的爬虫必须做两件事。
- 获取它必须抓取的链接。
- 抓取所述链接并将内容推送到数据库。
#1 的问题是,总共有 700+ 个链接。这些链接不会经常更改 - 也许每月一次?
因此,一种选择是每月对"链接列表"进行一次单独的爬网,然后将链接转储到数据库中。
然后,让爬网程序每天对这 700 个链接中的每一个进行数据库命中。
或者,我可以在我的爬虫中有一个嵌套的爬网 - 每次运行爬虫(每天)时,它都会更新这个包含 700 个 URL 的列表并将其存储在一个数组中,然后从这个数组中提取它来爬网每个链接。
哪个效率更高,对 Heroku 或任何主机的负担更少?
这取决于你如何衡量"效率"和"税收",但本地数据库命中几乎可以肯定比HTTP请求+解析链接的HTML(?)响应更快,更好。
此外,这并不是说这可能很重要,但是(假设您的数据库和适配器支持它)您可以开始循环访问数据库请求结果并处理它们,而无需等待或将整个集合提取到内存中。
网络延迟和资源将比戳一个已经坐在那里、正在运行并被设计为高效快速地查询的数据库要糟糕得多。
但是:每天一次?是否有充分的理由花费精力来优化此任务?