В любом парсере будет присутствовать цикл. Так же вам очень пригодится система тестирования регулярных выражений на тексте web страницы.
Первый уровень вложенности (парсинг поисковиков)
Это когда нужная вам информация содержится сразу при переходе на страницу. Так парсятся поисковики - пришли на страницу с заданным кеем, собрали ссылки, перешли на следующую.
Следующую, имеется ввиду, по этому же кею. И так далее, пока не кончится выдача, либо пока не достигнется нужное кол-во (может нужно собрать первые N ссылок).
В таком случае мы организуем цикл с выходом либо по кол-ву обработанных страниц, либо когда страницы вообще закончатся (пропадет ссылка "далее", например).
Многоуровневая вложенность (парсинг сайтов с многоуровневыми прайсами)
Это когда страница содержит ссылки, которые ведут на страницы с другими ссылками, которые в свою очередь ведут на другие страницы с ссылками, которые ведут на страницы, которые уже содержат нужный контент. Вложенность может быть разная. Такая схема характерна для сайтов-магазинов с каталогами, а также информационных сайтов о фильмах, играх и т.д. Или просто сайты с какой-то каталогизированной информацией.
Ни в коем случае не решайте эту задачу "в лоб". Т.е. не создавайте кучу вложенных циклов, иначе при любом сбое вы останетесь с полуспарсенными данными.
Предлагаем такое решение - разделяем парсинг на уровни вложенности и на каждый уровень делаем свой шаблон. Первый шаблон first_parse.xml для первого уровня проходит на ресурс и собирает ссылки на второй уровень в файл level_2.txt. Далее, запускается второй шаблон parse_level_2.xml для второго уровня, он берет ссылки из файла level_2.txt, переходит на них и парсит ссылки на третий уровень, сохраняя их в файл level_3.txt (причем он не в цикле будет парсить ссылки, а по одной ссылке на запуск шаблона, количество запусков вы поставите, когда он отработает первый шаблон и будет известно, сколько собрано ссылок. Можно сделать и циклом, но это сложнее и нужно четко понимать, как обрабатывать ошибки, чтобы парсинг не закончился на середине при очередной ошибке, не обработав и половины файла с ссылками от предыдущего шаблона). И так далее, пока не будет файл с ссылками на последний уровень где лежит нужный контент. Соответсвенно, последний шаблон last_parse.xml проходит по всем ссылкам, собранным в последнем файле level_N.txt (где N - последний уровень вложенности) и парсит контент на этих страницах, сохраняя его в нужный файл или файлы.
Т.е. мы получим три типа шаблона:
| 1. | Шаблон первого типа - парсинг ссылок с первой страницы с ссылками (first_parse.xml). |
| 2. | Шаблоны второго типа - парсинга ссылок на страницы с ссылками (parse_level_2.xml, .... parse_level_N.xml). |
| 3. | Шаблон третьего типа - парсинг контента на конечных страницах в самом низу вложенности (last_parse.xml). |
Эти шаблоны нужно будет запустить по очереди, начиная с first_parse.xml, далее parse_level_2.xml, .... parse_level_N.xml и в конце last_parse.xml.
Модификации многоуровневой вложенности
| 1. | Иногда контент лежит на всех уровнях, а не только на последнем. Тогда нужно в шаблонах второго типа тоже парсить и сохранять контент. Напоминаем, что вы можете парсить страницу сколько угодно раз в одном шаблоне (только сначала возьмите текст, а потом его парсьте регулярными выражениями с помощью соответствующих макросов, а не берите каждый раз новый текст через ветку Get--WebBrowser, т.к. это сильно нагружает процессор). |
| 2. | Иногда информация различается по категориям и вам придется не просто создавать файлы уровней с ссылками, а, возможно, создавать папки категорий. Например, у вас будут парсится названия категорий в шаблоне первого типа и создадутся файлы level_2.txt, но не один, а в каждой папке (с названиями категорий - боевики, фантастика, комедии и т.д. например, если парсите каталог фильмов) по файлу. Т.е. при работе шаблона first_parse.xml будут выпарсены названия категорий и ссылки из каждой категории будут класться в паку с названием категории в файл level_2.txt. Таких фалов будет столько, сколько всех категорий. В таком случае, возможно, вам придется создавать шаблоны на каждую категорию в каждом уровне. Либо брать название категории из файла (удаляя строку) и подставлять в путь к файлу с ссылками (например, level_2.txt), обработав таким образом, каждую категорию. Этот файл нужно будет восстанавливать для каждого уровня, т.к. после обработки уровня все строки с категориями будут удалены. |