假设我创建了一个网页抓取PHP页面(getdata.php
),它通过cUrl获取特定网站页面的内容,而不是将一些有用的信息保存到txt文件或数据库。
getdata.php
的伪代码,
min = get latest search id from database
max = 1.000.000 (yes one million different pages)
while (min < max) {
url = "http://www.website.com/page.php?id=".$min
content = getContentFromURL(url)
saveUsefulInfoToDb(content)
min++
set latest search id as min in database
}
没关系,过程是,
getdata.php
所以问题是我不知道如何使这个过程合理。在浏览器上打开页面并等待它完成抓取URL,我认为这是一个非常糟糕的做法。
如何让getdata.php在像cron这样的后台运行?
最好的方法是什么?
感谢。
答案 0 :(得分:3)
除了@hackartists的答案之外,我还想添加不要通过浏览器调用这个PHP页面。而是从命令行调用它
http://www.php.net/manual/en/features.commandline.introduction.php
在浏览器上打开getdata.php
应该是
使用cron
安排getdata.php从命令行运行
此外,记录成功或失败,以便您可以设置一些日志文件监视,以了解您的Web抓取作业何时失败(毕竟,您不希望每天坐在浏览器前面并自己监视)。 / p>
答案 1 :(得分:2)
在代码顶部使用
set_time_limit(0);
ignore_user_abort(true);
然后每天或在需要时使用cron来启动它。你肯定希望这是一个后台进程,而不是一个网页。这两行将允许它无限期地作为网页或cmd行脚本运行。如果你想把它作为一个网页,你仍然可以使用cron用“
”这样的行“解雇”它0 0 * * * /usr/bin/curl "http://yoursite.com/getdata.php" >> "/var/www/errors.log"
一些建议,因为我已经多次这样做了:肯定会创建一个日志功能来打印到文件,以便您可以看到它在运行时正在做什么,或者您将无法查看和编程到php文件中kill switch让你可以告诉它停止运行而不必使用unix top或重启apache。在一段时间内硬编码可能是一个好主意,它会在一定时间后停止,以免它运行超过一天而第二个实例启动并且你有几个同时运行。