我想在竞争对手的网站上抓取3,000个URL以获取价格值。我不想让他们的服务器过载或触发任何防火墙,因此第一个基本措施是在一周内传播这3,000个请求。
我的代码设置如下:
set_time_limit(0);
foreach ($links as $link) {
// crawl price from link
// save price to database
// 200 second delay before next crawl
sleep(200);
}
我使用每周午夜运行的cron作业触发此脚本。set_time_limit(0)
行应该覆盖max-execution time,但是我读到过由cron-job触发的脚本不受标准执行时间限制。
问题是,要让这个脚本运行一个星期,我假设服务器必须完全稳定,没有停机时间,否则爬网会失败。
我如何确保这一点,并在有停机时间的情况下,然后重新启动爬网自动从它失败的点?是一个星期太长的脚本运行?否则,我可以压缩到几个小时,但仍然,有足够的时间有脚本被中断,我感兴趣的情况下,它被中断,如何处理这一点,并完成脚本.
1条答案
按热度按时间e5nszbig1#
除非在
php.ini
中设置一个,否则在使用CLI时没有运行CRON时的max_execution_time。此外,如果你是爬行每个网址只有一次,和网址的都是不同的(而不是200都在同一个网站)然后等待之间的每一个单独的爬行是没有必要的,因为网址的没有链接或相互交谈
如果你想重新启动一个脚本,那么你所需要做的就是在一个文件或数据库中写一个“我到达的地方”。然后每当脚本启动时,它都会检查一个重新启动点并从那里开始。记住在脚本完成时删除重新启动文件/db,这样下次你运行脚本时它会再次从第一个URL开始。