0

我已经有一个使用 PHP cURL 构建的屏幕刮板,与 mySQL 数据库相关联。我存储了需要每周更新的产品,而不是我现在拥有的(我输入 url/产品并点击 go 的表单)。

我的第一个想法是每 30 分钟对这样的 PHP 文件使用标准 cron。

我想随机化两件事,PHP 脚本实际访问源站点的延迟(即 0 - 20 分钟),因此进程时间是随机的。其次,我想随机访问我的目标项目/页面,但在再次循环浏览列表之前,请确保每周和/或持续获取所有这些项目/页面。

计时器相当严格,不需要存储数据,但是我应该如何以这种方式跟踪我的项目/uri?我在想第二个 cron 来清除数据,而第一个只是增加。但是我仍然必须为已经更新的内容设置标志,而且我对选择存储这些数据的位置和方式还不够熟悉。

我正在使用带有 HTML5 选项的 mySQL,并且在 Codeigniter 上,因此也可以将 SQLite 中的数据作为选项保存。如果有意义的话,还可以与 cookie 一起保存。我在这部分有几个问题,我是每次都查询我的数据库(mySQL)以获取我需要的东西,还是每周存储一次 JSON 文件并运行它?这显然取决于和/或确定我在哪里标记已处理的内容。

4

1 回答 1

0

您有一个要在 MySQL 数据库中抓取的项目列表。确保有最后一次抓取项目的字段。

使用此工作流程将 cron 作业设置为每分钟运行一次:

  1. 确保脚本的先前运行已完成(参见步骤 #4)。如果没有,结束。
  2. 检查您上次刮擦任何物品的时间。
  3. 确保已经过去了足够的时间(参见步骤#9)。如果没有,结束。
  4. 在某处设置一个值以表明您正在处理(因此后续运行的第 1 步是已知的)。
  5. 随机选择要抓取的项目。(来自那些没有及时被刮掉的n。)
  6. 延迟几秒钟的随机间隔,以确保所有请求并不总是在一分钟内。
  7. 刮掉它。
  8. 上次为该项目抓取的更新时间。
  9. 在下一次操作之前设置一个随机时间等待(因此后续运行的第 3 步是已知的)。
  10. 设置一个值以表明您没有处理(因此后续运行的第 1 步是已知的)。
  11. 结尾。

一旦所有项目都被抓取,您可以设置一个变量来保存批次完成的时间,并将其用于n第 5 步。

于 2013-03-18T18:43:31.360 回答