长时间运行的PHP scraper返回500内部错误

时间:2011-09-22 10:48:47

标签: php scrape scraper

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

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

所以,如果您有任何想法有助于解决这种情况,我将非常感谢您的帮助!

提前谢谢, z

2 个答案:

答案 0 :(得分:0)

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

  1. 获取用户详细信息
  2. 转储到文件
  3. clear vars
  4. 重复..
  5. 如果您将执行时间设置为无穷大并定期将vars转储到文件/ db,那么您的php脚本应运行数小时。

答案 1 :(得分:0)

  

支持说我可以将内存提高到4千兆字节

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

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

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