3

大多数情况下,我在谷歌上找到了我的问题的答案,但现在我被困住了。我正在研究一个刮板脚本,它首先刮掉网站的一些用户名,然后获取用户的每一个细节。涉及到两个爬虫,第一个通过主页,获取名字,然后获取其个人资料页面的详细信息,然后前进到下一页......我正在抓取的第一个站点总共有64个名字,显示在一个主页上,而第二个页面有4个页面,显示超过365个名字。

第一个效果很好,但是第二个不断让我收到 500 内部错误。我试图限制脚本,只抓取几个名字,这就像魅力一样,所以我更确定脚本本身没问题!我的 php ini 文件中的 max_execution_time 设置为 1500,所以我想这也不是问题,但是有一些原因导致错误......例如,不确定在每 10 个名称之后添加一个睡眠命令是否可以解决我的情况,但是好吧,我现在正在尝试!

因此,如果你们中的任何人知道什么可以帮助解决这种情况,我将不胜感激!

在此先感谢,z

4

2 回答 2

0

支持说我可以将内存提高到 4GB

典型的金钱欺诈支持答案。节省您的现金并编写更好的代码,因为您正在做的事情可以很容易地从免费的网络托管服务提供商的共享服务器上运行,即使他们有严格的资源限制。

首先获取/更新用户列表作为一个作业,然后以较小的批次提取详细信息作为另一个作业。使用 SQL BULK Insert 命令减少与数据库的连接。它的运行速度也比遍历单个 INSERTS 快得多。

用户名和详细信息本质上是一个静态列表,因此无需急于实时获取所有数据。只需使用 cronjob 来获取详细信息,最终脚本将赶上被添加到传入列表中的新用户名,您最终会得到一个更快、更精简、更高效的系统。

于 2012-06-08T01:33:51.490 回答
0

这绝对是内存问题。您的变量之一正在增长超过您在 php.ini 中定义的内存限制。如果您确实需要存储大量数据,我建议您定期将结果写入文件和/或数据库(然后释放您的变量),而不是在运行时将它们全部存储在内存中。

  1. 获取用户详细信息
  2. 转储到文件
  3. 清除变量
  4. 重复..

如果您将执行时间设置为无穷大并定期将变量转储到文件/数据库,您的 php 脚本应该可以运行数小时。

于 2012-06-07T22:12:50.873 回答