Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Парсинг сайта с умом
Форумы портала PHP.SU » » Работа с сетью » Парсинг сайта с умом

Страниц (1): [1]
 

1. OLDJman - 01 Февраля, 2015 - 22:19:42 - перейти к сообщению
Добрый день уважаемое сообщество.

Задался целью парсить данные с сайта Vezetvsem.ru.

Соль вопроса, как сделать так, чтобы их сервер, считал меня настоящим браузером, и не мог "легко" вычислить, что я бот, и как следствие заблокировать меня?
Какие еще настройки желательно добавить, чтобы быть "настоящим" пользователем?

Предполагается обращение к этому сайту несколько раз в день, несколько месяцев подряд.

Сам парсер работает. Сначала функция авторизации получает куки, сохраняет их на жесткий диск, вторая функция используя куки, ходит по страницам.

К сожалению, через полчаса-час, куки, видимо, устаревают, и приходится заново проходить авторизацию. Вот в этом месте у меня по неопытности, ощущение, что администратору видно, что я парсер и часто хожу авторизовываться, ведь когда ходишь по страницам через браузер, авторизацию никогда не просит пройти.

Достаточно ли настроек, чтобы сервер не считал меня ботом?

Пожалуйста, подскажите, в какую степь копать, по сути это мой первый серьезный опыт, и от любой критики не откажусь.

P>S> если кому интересно, после, полученные данные будут с помощью регулярных выражений извлекаться и помещаться в базу, с которой уже будет идти основная работа.

Функция авторизации

PHP:
скопировать код в буфер обмена
  1.  
  2. function auth( $url ) //функция авторизации на сайте
  3. {
  4.   $uagent = "..."; // данные браузера, тут вставляю свою версию
  5.   $ch = curl_init( $url );
  6.   curl_setopt($ch, CURLOPT_URL,$url);
  7.   curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookieVezetVsem.txt'); // куда сохранять куки
  8.   curl_setopt($ch, CURLOPT_POST,1);
  9.   curl_setopt($ch, CURLOPT_POSTFIELDS, "username=login&password=pass");
  10.   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   // возвращает веб-страницу  
  11.   curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  // useragent
  12.   curl_exec ($ch);
  13.   curl_close( $ch );
  14. }


Сам парсер

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. function get_web_page( $url ) // функция парсера
  4. {
  5.   $uagent = "...";
  6.  
  7.   $ch = curl_init( $url );
  8.  
  9.   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   // возвращает веб-страницу
  10.   curl_setopt($ch, CURLOPT_HEADER, 0);           // не возвращает заголовки
  11.   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);   // Установил значение 0 (строка отвечает за переход по редиректам)
  12.   curl_setopt($ch, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
  13.   curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  // useragent
  14.   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
  15.   curl_setopt($ch, CURLOPT_TIMEOUT, 120);        // таймаут ответа
  16.   curl_setopt($ch, CURLOPT_MAXREDIRS, 0);       // установил значение 0(останавливаться после 10-ого редиректа)
  17.   curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookieVezetVsem.txt'); // берем куки из файла
  18.  
  19.  $content = curl_exec( $ch );
  20.   $err     = curl_errno( $ch );
  21.   $errmsg  = curl_error( $ch );
  22.   $header  = curl_getinfo( $ch );
  23.   curl_close( $ch );
  24.  
  25.   $header['errno']   = $err;
  26.   $header['errmsg']  = $errmsg;
  27.   $header['content'] = $content;
  28.   return $header;
  29. }

(Добавление)
Как я понимаю, мне нужно сказать их серверу, чтобы он держал сессию, пока я хожу по страницам заказов, и собираю данные.
Через firebug видно, что они выдают куки подлиннее тех, что мне создает сам парсер, и я так думаю, помимо самой авторизации, выставляются куки "нахождения на сайте". Интернет активность показывает, что через определенные промежутки, он обновляет key через POST запрос на адрес http://www.vezetvsem.ru/hori/keys, который выставляет какую-то куку.
У меня пока мало опыта, поэтому я не могу быть уверен, что делаю все правильно, а сам самоучка, данные ищу в интернете.
Просто не хочется, как варвар все делать. Охото аккуратно, хотя бы постараться аккуратно.
2. OrmaJever - 01 Февраля, 2015 - 22:29:26 - перейти к сообщению
поставьте нормальный юзер агент и за несколько раз в день сайт вам точно ничего не сделает
3. OLDJman - 01 Февраля, 2015 - 22:56:39 - перейти к сообщению
OrmaJever пишет:
поставьте нормальный юзер агент и за несколько раз в день сайт вам точно ничего не сделает


UserAgent я устанавливаю браузера, через который запускаю (пока использую Denwer), в коде выше просто удалил, так как посчитал, что это персональный данные, никому не нужны.

Вопрос в настройках опций setopt, нужно ли что-нибудь указывать, чтобы админам было видно, что я поддерживаю сессию, и не будет ли подозрительным, что каждый раз заходя на сайт, я предварительно авторизуюсь, когда сайт поддерживает автовход?
(Добавление)
На всякий случай, проясню момент, это не воровство контента, это желание сделать своими руками некую замену их API, который у них видите ли криво работает, а нормальных фильтров для работы с сайтом сделано не было. Администрация не желает идти на сотрудничество, вот я и ищу обходной путь.

Да и воровать там не чего.
4. OrmaJever - 02 Февраля, 2015 - 00:35:58 - перейти к сообщению
OLDJman пишет:
и не будет ли подозрительным, что каждый раз заходя на сайт, я предварительно авторизуюсь, когда сайт поддерживает автовход?

даю 95% что нет, кто на это смотрит?
5. OLDJman - 02 Февраля, 2015 - 11:29:38 - перейти к сообщению
OrmaJever пишет:
OLDJman пишет:
и не будет ли подозрительным, что каждый раз заходя на сайт, я предварительно авторизуюсь, когда сайт поддерживает автовход?

даю 95% что нет, кто на это смотрит?


Я просто никогда не был админом. Мне всегда казалось, что этим только и занимаются администраторы ^_^.

 

Powered by ExBB FM 1.0 RC1