0

我希望有人可以帮助我解决我一直面临的这个问题。我编写了一个蜘蛛,它使用 cURL 和 DOMDocument 库从网站拉回页面,遍历网站链接以从更多页面中查找和拉回数据。我专门提取的数据是关键字(页面上所有不是 html/script 代码的词),它们稍后会存储到 mySQL 数据库中(以及爬网/页面信息,例如 URL、父 URL、运行时,关键字计数等)。

我的问题是关于内存,更具体地说,是内存不足。如果蜘蛛只从网站顶部下降 1 级,那可能是 500 个链接,在我的测试中,到目前为止平均遇到大约一百万个关键字。内存开始很快耗尽,如果我尝试在同一个脚本中为其他网站运行后续蜘蛛,我经常会遇到内存不足的错误。为了解决后一个问题,我计划实施 pcntl 以并行运行一些额外的蜘蛛,但它仍然没有解决单个蜘蛛仅从它们可能提取的大量数据中耗尽内存的可能性。

我的问题是,对于处理大量数据的应用程序,是否有典型的方法来处理这些类型的内存不足问题?起初我实现了 APC 缓存来尝试存储关键字数据,但后来我发现 APC 严格用于操作码缓存,这似乎意味着它只将操作码存储到 RAM 以加快 Web 服务器访问频繁访问的 PHP代码(出于我的目的,这是多余的,无论如何,我的蜘蛛应用程序无论如何都应该作为 cron 作业运行)。我是否应该在蜘蛛移动时尝试将关键字数据缓存到一个文件/文件中,或者是否有任何我应该考虑的库/框架可以帮助我朝着正确的方向前进?我只是不想犯同样的错误两次尝试一种认为它会起作用的方法,然后发现我最终在旋转我的轮子。非常感谢任何人都可以提供的任何帮助!

4

0 回答 0