Если вы хотите хранить эти данные на длительный срок, используйте базу данных.Вы можете хранить m просканированных URL-адресов и их n-адресов в базе данных с их статусами.Когда вы собираетесь снова сканировать, сначала проверьте базу данных на предмет просканированных URL.
Например:
Сохраните свои mURL в mtable примерно так:
id | mURL | status | crawlingDate
------------------------------------------------------------------
1 | example.com/one.php | crawled | 01-01-2010 12:30:00
2 | example.com/two.php | crawled | 01-01-2010 12:35:10
3 | example.com/three.php | not-crawled | 01-01-2010 12:40:33
Теперь получите каждый mURL из mtable , получите все n URL и сохраните его в ntable примерно так:
id | nURL | mURL_id | status | crawlingDate
----------------------------------------------------------------------------
1 | www.one.com/page1.php | 1 | crawled | 01-01-2010 12:31:00
2 | www.one.com/page2.php | 1 | crawled | 01-01-2010 12:32:00
3 | www.two.com/page1.php | 2 | crawled | 01-01-2010 12:36:00
4 | www.two.com/page2.php | 2 | crawled | 01-01-2010 12:37:00
5 | www.three.com/page1.php | 3 | not-crawled | 01-01-2010 12:41:00
6 | www.three.com/page2.php | 3 | not-crawled | 01-01-2010 12:42:00
При следующем сканировании сначала извлеките все записи из mtable одну за другой и получите все nURL из каждой mURL.Теперь сохраните все nURL в ntable , если он еще не существует.Теперь начните сканирование каждого nURL, чтобы получить данные, где статус не сканируется, и установите статус crawled , когда закончите.Когда все nURL для одного mURL будут выполнены, вы можете установить статус crawled для этого mURL в mtable .
Если вы не хотите использоватьбазы данных и хотите запустить сканер раз и навсегда, тогда вы можете использовать эту логику в массивах.
Возможно, это поможет вам определить направление.