我已经有了一个使用PHP cURL构建的sceen scraper,它与mySQL数据库绑定。我存储了需要每周更新的产品,而不是现在的产品(我输入url/product并点击go的表格(。
我的第一个想法是每30分钟在这样的PHP文件上使用一次标准的cron
我想随机化两件事,PHP脚本实际访问源站点的延迟(即0-20分钟(,因此进程时间是随机的。其次,我想随机访问我的目标项目/页面,但在再次循环浏览列表之前,请确保每周和/或持续访问所有项目/页面。
计时器相当紧凑,不需要存储数据,但我应该如何以这种方式跟踪我的项目/uri?我想用第二个cron来清除数据,而第一个只是递增。但我仍然必须设置已经更新的内容的标志,我只是不够熟悉,无法选择在哪里以及如何存储这些数据。
我使用的是mySQL,带有HTML5选项,并且使用Codeigner,因此也可以将数据作为选项保存在SQLite中。。如果有道理的话,还有饼干。关于这一部分,我有几个问题,我是每次都查询我的数据库(mySQL(以获得我需要的东西,还是每周存储一次jSON文件并运行它?这显然取决于和/或决定了我在哪里标记已经处理的内容。
您有一个要在MySQL数据库中抓取的项目列表。确保有一个字段保存上次刮擦项目的时间。
将cron作业设置为使用以下工作流每分钟运行一次:
- 确保脚本的上一次运行已经完成(请参见步骤#4(。如果没有,结束
- 检查一下你上次刮到的东西
- 确保经过了足够的时间(参见步骤#9(。如果没有,结束
- 在某个地方设置一个值,以显示您正在处理(因此后续运行的步骤#1是已知的(
- 随机选择要刮取的项目。(来自
n
时间内未刮到的。( - 延迟秒的随机间隔,以确保所有请求不总是在分钟内
- 刮一下
- 上次为该项目刮取的更新时间
- 在下一次操作之前设置一个等待的随机时间(因此后续运行的步骤#3是已知的(
- 设置一个值以显示您没有进行处理(因此后续运行的步骤#1是已知的(
- 完
一旦刮取了所有项目,就可以设置一个变量来保存批次完成的时间,并在步骤#5中将其用于n
。