Иногда хочется разместить на сайте информацию, добыть которую самостоятельно невозможно. Например, прогноз погоды или последние мировые новости. К сожалению, самостоятельно предсказывать погоду может не каждый (особенно, если делать это более-менее верно), поэтому есть выход: взять эту информацию из надежного источника. Конечно, никто в здравом уме, не станет каждый день копировать прогноз с солидного сайта и ставить его себе, правя исходные коды страницы. Многие стараются автоматизировать этот процесс и пишут программы, которые в народе называются грабберы. О чем же нужно помнить, при разработке граббера?
Для начала нужен инструментарий. Помимо очевидных ЯВУ, хостинга, доступа в инет и пр., нужны еще и знания. Скорее всего, вам понадобится знание регулярных выражений. Если вы их до сих пор не знаете — незамедлительно бежать в гугль и читать, читать, читать и еще раз читать. Ну и конечно, пробовать. Для граба, как правило, не нужны сильно сложные выражения, но базовые основы знать необходимо(кое-какие рецепты я уже публиковал).
Итак, мы выучили регулярные выражения и даже написали наше приложеньице. Но граббер не будет иметь смысла, если его периодически не запускать. Как часто — зависит от целей и возможностей. Например, если вы грабите прогноз погоды, то достаточно запускать граббер раз в день. Если это новости с редкообновляющегося сайта, то, возможно, достаточно будет запускать граббер раз в несколько дней или недель.
От сюда следует вопрос: как же запускать граббер? Во-первых, нужно сразу запомнить, что запускать граббер каждый раз при загрузке страницы — вредно для скорости загрузки сайта и для сервера. Кроме того, если вы несовсем честно заимствуете контент, то вас будет проще вычислить. Поэтому остаются два варианта запуска: руками и по chron. Первый метод, возможно, будет подходящим, если вы грабите редкообновляемый сайт. Второй способ подходит для регулярных грабов сайта и наиболее автоматизирован.
Это зависит от ваших потребностей. Если вас устраивает разметка, которая используется на том сайте, с которого вы грабите, то берите данные вместе с разметкой — меньше проблем. Если вам нужны файлы и ссылки, фильтруйте и заменяйте их. Если вам достаточно текста — примите меры по фильтрации картинок, ссылок и прочих элементов, которые могут повредить вашей репутации:)
Если вы решили грабить все, включая картинки, то нужно заранее озаботиться местом, куда эти картинки будут складываться и, конечно, решить для себя, будут ли для каждого изображения создаваться отдельные файлы, или каждая новая картинка будет перезаписывать ту, что уже у вас есть.
Кроме того, нужно учитывать специфику объекта граба. Если это погода с изображением облачности и осадков, то, возможно, имеет смысл складывать все эти картинки у себя и не грабить их лишний раз. Если у меня уже есть тучка, зачем мне снова качать ее?
Тут зависит от ситуации. Чаще всего приходится оставлять ссылки на внешние ресурсы, но удалять те, что ведут на внутренние страницы сайта. Иногда можно удалять все ссылки, оставляя только их текст. В случае, если вы грабите сайт вручную (ручной запуск), можно предусмотреть интерфейс, который будет спрашивать что делать с ссылками, находящимися в тексте страницы.
Отдельный разговор, если вы хотите делать клон сайта (фуу... плохо запахло). В этом случае, вам придется заморочаться и восстановить ссылочную целостность у себя на сайте. Для этого нужно пройти по ссылке, закачать ее содержимое, сформировать адрес, по которому доступна вторая страница и подставить его в качестве значения href ссылки на первой странице. Вероятно, придется использовать нехилую рекурсию. А кто говорил, что воровать контент легко? Помните! Гугль всегда покажет бдительному владельцу его клонов и вас быстро выведут на чистую воду.
Это личное дело каждого. Вы можете пихать их в БД, можете хранить в виде xml. Я предлагаю формировать данные в готовый html и хранить этот готовый к употреблению кусочек где-нибудь недалеко. При формировании страницы, нам не придется делать выборки из БД или парсить xml. Нам нужно будет только взять файл и воткнуть его туда, куда нужно. Быстро и сердито.
Никому не хочется захламлять базу лишними данными. При грабе лент новостей бывает важно избежать дублирования информации. Чтобы не засорять базы, нужно определять есть ли у нас уже полученная информация или нет. Я предлагаю пользоваться функцией md5() в php или crypt в Perl. Эти функции возвращают уникальный хэш-код строки-параметра. Нужно вычислить md5 только что полученной записи и md5-коды имеющихся записей. Если они совпадают — запись уже существует. Если нет — пора качать:)
Вот такие мои соображения по поводу грабов. Наверное, скоро напишу статейку, где покажу как можно грабить что-нибудь. Например, выдачу яндекса, ленту RSS или тот же прогноз погоды. Что вам больше интересно?
Вы можете заказать грабер сайта любой сложности у меня. Стоимость зависит от ваших потребностей. А предварительно можете поиграться с моим чудо-граббером. Это универсальный граббер картинок и ссылок с веб-интерфейсом.
О том, что такое RSS и как оно облегчает жизнь, я уже писал.