Остановлюсь на содержимом INI-файла. В секции MAIN разместим ссылку на сайт, который чаще всего проверяем и ключевые слова через разделитель. В секции SITE01 разместим информацию для парсинга Яндекса. Регулярное выражение для парсинга выдачи Яндекса составила, не особо заморачиваясь. Но оно недолговечно, может измениться, это надо помнить.
[MAIN]
DefSite=http://parsing-and-i.blogspot.com/
DefWords=парсинг|парсер на Delphi
[SITE01]
Name=Yandex.ru
NextPageTmpl=http://yandex.ru/yandsearch?p=[NumPage]&text=[Word]&numdoc=50
LinkRegExp=<a tabindex="\d{1,}".*href="(.*)" target="_blank">(.*)</a>(?:\x0D\x0A|\n|)</div>
Вместо [NumPage] при реализации алгоритма будем подставлять номер страницы в выдаче, вместо [Word] — поисковый запрос.
Алгоритм будет следующий: по очереди проходимся по списку поисковых систем, для каждой системы рассматриваем список ключевиков. Загружаем страницу результатов выдачи по запросу, выделяем все позиции сайтов, проверяем, есть ли сайт в выдаче. Если есть — смотрим место и переходим к следующему запросу. Если нет — переходим на следующую страницу (не заходя за рамки указанного для просмотра количества позиций). И так все операции в цикле. Результат выводим в грид.
Я намеренно не привела код на данном этапе. Алгоритм работает, все парсится. Оттестировав программу на Яндексе, я захотела продолжить вечеринку с Гуглем. Но...
Как в процессе любых разработок, со временем могут открываться новые детали, в соответствии с которыми нужно будет вносить изменения в код. К этому всегда надо быть готовым. Итак, начала заполнять данные по Google в ini-файле.
[SITE02]
Name=Google.ru
NextPageTmpl=http://www.google.com/search?q=[Word]&num=100&hl=ru&start=[NumPage]
Тут обнаружилось, что в Яндексе надо указать просто номер страницы, начиная с нуля, а в гугле надо указать номер позиции, с которой начинается отсчет (нумерация с нуля, как у всех программистов :) ). Похоже, придется делать заплату. Ввожу KoeffForPages. Внутри алгоритма буду умножать номер страницы на этот коэффициент. Для Яндекса он будет равен единице, а для Гугля — количеству выводимых позиций на странице.
В результате INI-файл содержит:
[MAIN]
DefSite=http://parsing-and-i.blogspot.com/
DefWords=парсинг|парсер на Delphi
[SITE01]
Name=Yandex.ru
NextPageTmpl=http://yandex.ru/yandsearch?p=[NumPage]&text=[Word]&numdoc=50
KoeffForPages=1
LinkRegExp=<a tabindex="\d{1,}".*href="(.*)" target="_blank">(.*)</a>(?:\x0D\x0A|\n|)</div>
[SITE02]
Name=Google.ru
NextPageTmpl=http://www.google.com/search?q=[Word]&num=100&hl=ru&start=[NumPage]
KoeffForPages=100
LinkRegExp=<h3 class=r><a href="(.*?)"
А класс в программе выглядит:
TSearcher = class
Name,
NextPageTmpl,
LinkRegExp : string;
KoeffForPages : integer;
end;
И так далее. Процесс программирования — вещь сама по себе очень интересная. Остальные поисковые системы я разбирать не буду.
После реализации алгоритма запускаю прогу:

Видали? По ключевику Парсер на Delphi я уже даже не самый лох в Google. А вот Яндекс этот блог в выдачу вообще не взял. Надеюсь, временно.
В исходниках можете посмотреть реализацию алгоритма. Но программа сырая — надо делать проверку позиций в отдельном потоке, чтобы главная форма не подвисала. Это будет домашним заданием тому, кому хоть как-то пригодилась эта моя статья. :)
Скачать: исходник парсера (6 кб), скомпиленный парсер (1,12 Мб).