Сохранение при обрыве парсинга в PHP
Если сайт, который вы парсите, достаточно большой и парсится достаточно много времени - может случится обрыв.
Причины могут быть разные. Например, банальные проблемы с интернетом, или компьютер отключится, или вам срочно нужно отойти, а сайт еще не спарсился, или вас забанил сайт, который вы парсите.
В последнем случае можно вообще не спарсить сайт - он вас отбанит через некоторое время, но если начать парсинг сначала, то вы опять дойдете примерно до этого место и вас опять забанят.
Поэтому нужно делать возможность сохранения и возобновления парсинга с места обрыва. В общем то, можно обойтись и без этого, если сделать кеш - в этом случае после обрыва парсер вначале будет идти по кешу, что на порядок быстрее и не банится, так как вы не дергаете чужой сайт, бегая по своему кешу.
Однако, все равно некоторое время будет тратится на парсер кеша и лучше обойтись без этого и начать с места обрыва.
Давайте посмотрим, как реализовать сохранение и возобновление парсинга.
Наиболее просто это сделать в методе паука, работающем на базе данных. В случае обрыва у нас останется таблица в базе данных, в которой уже будут отмечены те ссылки, которые мы уже прошли и новые, которые еще надо пройти.
В случае метода паука, работающем на массиве, нам нужно будет сохранять этот массив в файл в JSON формате. А также нужно будет сохранять номер элемента массива, на котором мы остановились.
В случае поэтапного метода все намного сложнее. Хорошим подходом тут будет хранить ссылки на категории сайта, которые мы будем парсить и отмечать те, которые уже спаршены. В случае обрыва мы будем продолжать парсинг с первой неспаршенной категории. В этом случае неспаршенная категория уже возможно была частично спаршена и будет перепаршена заново, однако, это лучше, чем парсить весь сайт заново.
Можно делать и более сложные сохранки - вплоть до хранения страницы, на которой остановился парсер. Нужно только искать среднее между сложностью разработки сохранения и выгодой от него. Иногда проще перепарсить часть сайта и сделать простое сохранение категорий, чем мучаться и делать скрупулезное сохранение вплоть до страницы.
Реализуйте описанные варианты сохранения.