用phpQuery抓取数据的替代方法? (或者,为什么每6,000次刮擦错误?)

时间:2011-08-04 17:04:22

标签: php web-scraping phpquery

我有一个PHP脚本,可以从政府网站上删除数据并将其放入MySQL数据库中以便于搜索。它工作得很好,但是每隔6,000行,它就不能成功地刮掉了。我认为这是phpQuery中的某种内存泄漏,我用来解析我获取的HTML。

Here are the errors,正如您所看到的,它们都在phpQuery文件中。奇怪的是,一旦它出错,我可以在它开始出错的记录中重新启动脚本,并且它可以在另外6,000个左右的记录中正常工作。

有没有人在phpQuery中听说过这种情况?也许有太多的phpQuery对象? (我无法找到'关闭'它们的方法)

或者,你对我能做到的另一种方式有什么建议吗?目前,我必须每40分钟左右手动重启脚本,并且有500,000条肯定会加起来的记录。

3 个答案:

答案 0 :(得分:1)

我使用过phpQuery(大规模),我没有注意到这样的错误。

尝试每1000行重新加载phpQuery - 只需清除所有变量,并希望垃圾收集器能解决问题。

答案 1 :(得分:0)

我想要代码样式的新答案;)

在1000行之后动态重新加载脚本的两种方法:

在unix主机上:

exec("php __FILE__ &");

通过http请求:

ignore_user_abort(1);
set_time_limit(0);

... 1000 rows parsed ...

$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,1);
curl_exec($curl_handle);
curl_close($curl_handle);

答案 2 :(得分:0)

要从内存中卸载所有或指定的文件我使用

phpQuery::unloadDocuments($id = null);