Сохранение при обрыве парсинга в PHP

Если сайт, который вы парсите, достаточно большой и парсится достаточно много времени - может случится обрыв.

Причины могут быть разные. Например, банальные проблемы с интернетом, или компьютер отключится, или вам срочно нужно отойти, а сайт еще не спарсился, или вас забанил сайт, который вы парсите.

В последнем случае можно вообще не спарсить сайт - он вас отбанит через некоторое время, но если начать парсинг сначала, то вы опять дойдете примерно до этого место и вас опять забанят.

Поэтому нужно делать возможность сохранения и возобновления парсинга с места обрыва. В общем то, можно обойтись и без этого, если сделать кеш - в этом случае после обрыва парсер вначале будет идти по кешу, что на порядок быстрее и не банится, так как вы не дергаете чужой сайт, бегая по своему кешу.

Однако, все равно некоторое время будет тратится на парсер кеша и лучше обойтись без этого и начать с места обрыва.

Давайте посмотрим, как реализовать сохранение и возобновление парсинга.

Наиболее просто это сделать в методе паука, работающем на базе данных. В случае обрыва у нас останется таблица в базе данных, в которой уже будут отмечены те ссылки, которые мы уже прошли и новые, которые еще надо пройти.

В случае метода паука, работающем на массиве, нам нужно будет сохранять этот массив в файл в JSON формате. А также нужно будет сохранять номер элемента массива, на котором мы остановились.

В случае поэтапного метода все намного сложнее. Хорошим подходом тут будет хранить ссылки на категории сайта, которые мы будем парсить и отмечать те, которые уже спаршены. В случае обрыва мы будем продолжать парсинг с первой неспаршенной категории. В этом случае неспаршенная категория уже возможно была частично спаршена и будет перепаршена заново, однако, это лучше, чем парсить весь сайт заново.

Можно делать и более сложные сохранки - вплоть до хранения страницы, на которой остановился парсер. Нужно только искать среднее между сложностью разработки сохранения и выгодой от него. Иногда проще перепарсить часть сайта и сделать простое сохранение категорий, чем мучаться и делать скрупулезное сохранение вплоть до страницы.

Реализуйте описанные варианты сохранения.