Долго думал писать или не писать эту статью. Сразу оговорю, что все нижесказанное на момент прочтения скорее всего устареет для конкретного сайта. Т.е. это не руководство по парсингу именно авто.ру, а скорее пост о том, как я это делаю, какие продвинутые средства защиты информации используются на сайтах, как их обойти или применить у себя. Если это читают админы авто.ру, то считайте, что это ода вашей защите, которые вы наверняка уже переделали.
Итак, начнем.
Эта площадка для размещения объявлений крайне популярна. Количество ежедневно публикуемых объявлений исчисляется тысячами, ну и, как следствие, количество парсеров, которые ежесекундно бороздят этот сайт, соразмерно велико.
Поверхностно изучив данный ресурс видим, что cookie генерируются не только сервером, но и на клиенте. Моя любимая js капча, вновь на вооружении. Это воистину самое действенное средство против 90% горе парсописцев. В данном случае, ключ (или даже ключи) записываются в cookie, и уже так отсылаются на сервер. Очевидно, что методы типа
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt');
нам уже не помогут.
Далее видим, что телефон, электронный ящик и т.п. данные запрашиваются отдельно. На некоторых особо продвинутых досках я видел, как этот запрос возвращает картинку с данными. Своего рода капча, которая тоже отпугнет процент грабберов. Тут же другая напасть, при запросе сервер отчего-то точно знает, что-мы стучим не со страницы сайта, а с иного места.
Ну, что же, засучим рукова и вперед. Обычно я сперва пишу парсер, потом, когда все получится, пишу статью. На этот раз есть лишь задача, на момент написания этих строк парсер еще не написан, все опыты проделаны лишь в отладчике. Я буду писать все от и до, как я это делаю.
Для начала отделим мух от котлет. Запускаем Opera DragOnFly (ctrl+alt+I) заходим во вкладку сеть и открываем сайт. Видим кучу cookie. Уберем лишние. Все куки которые начинаются похожи на __utmb удаляем сразу же. Эти "печенки" генерирует Google Analytics, они нам ни к чему.
Я рано похоронил CURLOPT_COOKIEFILE, отправим запрос на сайт. Откроем cookie.txt и посмотрим, какие данные нам отдает сервер, а какие генерирует JavaScript. Видим adOtr, которая при каждом запросе меняется. Похоже на нужный key. Осталось выяснить, как же она формируется.
Удаляем эту куку, и нажимаем на Показать телефонный номер. Вуаля, сервер нас палит.