1. Отсутствующий реферер.
2. Кривой useragent.
3. Прямой запрос на поиск - запретили.
4. Или делают проверку токена на валидацию "прозрачной" пройденной ajax-авторизации для гостей.
5. Или проверяют наличие или свойства некого системного объекта, который отличается от браузерного при парсинге.
Рестайлер - грузим скрипт на старый сайт, таскаем и настраиваем элементы и их оформление, фоны, поведение, закругления и т.д. в визуальном режиме.
Сохраняем новый css через локальную выгрузку с текущей страницы (без сервера).
-----
Потом подменяем css на старом сайте новым и получаем новый дизайн с минимальными трудозатратами!
Я выложил includeHTML.
Рекурсия, callback-и, синхрон/асинхрон, работа с DOM.
Можно ориентироваться по сложности на него.
Главное - это то, что может показать ваши навыки рекурсивной обработки данных разными блоками кода без их дублирования.
Циклический сдвиг по позициям элементов массива с уменьшающимся "окном" просматриваемых элементов: от самого длинного N-1 до 1.
"Окно" совпало с имеющимся образцом для данного размера окна -> инкремент количества данной последовательности.
Не совпало -> новый элемент последовательности для данного размера "окна".
Итог: массив из всех последовательных уникальных сочетаний с указанием количества их повторов в изначальном массиве.
Для php есть либы, которые понимают формат excel. Их и используйте.
Для "живого" поиска - используйте обмен данными в json-структуре и выполняйте отправку на сервер только когда выполнятся все условия:
1. Содержимое поля поиска изменилось.
2. Интервал ожидания ввода очередного символа более, чем в 1.5 раза от среднего интервала ввода всех предыдущих символов.
3. Прошло не менее 0.5 секунды от момента предыдущего изменения поля.
4. Поле содержит 3 или более символа.
5. Запрос не равен предыдущему (добавили и сразу удалили символ).