【问题标题】:Long running PHP scraper returns 500 Internal Error长时间运行的 PHP 爬虫返回 500 内部错误
【发布时间】:2011-09-22 10:48:46
【问题描述】:

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

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

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

提前致谢, z

【问题讨论】:

  • 查看 Apache 错误日志文件以查看 500 背后的确切错误消息
  • 查看 apache 错误日志以获取更多信息。
  • 脚本运行了多长时间?
  • 我真的不能说...大约 1 分钟...或更多...实际上,我想这是内存问题...支持人员说我可以将内存提高到 4GB ,但是,我不确定我是否要这样做...我只会让脚本运行更多时间并跳过重复项。无论如何,在 apache 日志文件中没有发现任何错误...感谢您的回复!

标签: php scrape scraper


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 2023-04-03
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      相关资源
      最近更新 更多