Написал следующую функцию для парсинга. Все работает как надо, но есть пара issue.
1) Функция исполняется в цикле, отдавая ВЕСЬ html-код, который в свою очередь анализирует title, и работает с данными. Но после нехитрых расчетов стало понятно, что нужное мне кол-во итераций будет парсится этак с месяц :D Можно ли на этапе получения кода страницы ОСТАНОВИТСЯ, если была достигнута строка с ... - это уже уменьшить размер парсируемых данных в десяток раз.
2) Это мой первый скрипт, которые авторизуется в закрытой области. Запускается он в консоли, и я заметил, что авторизация (и запись куки) происходит при каждом обращении к функции, что тоже занимает определенное время. Обязательно ли каждый раз выполнять авторизацию выполнять?
function curlRequest($url, $referer = 'http://www.google.com') {
// Logging data
$login_url = "...";
$account_user = "...";
$account_password = "...";
$post_data = "user={$account_user}&pwd={$account_password}";
// Curl initialization and options
$ch = curl_init();
$options = array(
CURLOPT_URL => $login_url,
CURLOPT_POST => 1, // указываем что это POST запрос
CURLOPT_POSTFIELDS => $post_data,
CURLOPT_HEADER => 0,
CURLOPT_USERAGENT => "Mozilla/5.0 ....",
CURLOPT_REFERER => $referer,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => 1, // в случае необходимости, следовать по перенаправлениям
CURLOPT_COOKIEJAR => 'cookie.txt',
CURLOPT_COOKIEFILE => 'cookie.txt',
CURLOPT_CONNECTTIMEOUT => 180,
CURLOPT_SSL_VERIFYPEER => false,
//CURLOPT_ENCODING => "",
);
curl_setopt_array($ch, $options);
// Авторизация
$post_result = curl_exec($ch);
echo ($post_result === 0) ? 'Error authentication.' : "";
// Получение страницы после авторизации
curl_setopt($ch, CURLOPT_URL, $url);
$parsed = curl_exec($ch);
// Закрыть соединение
curl_close($ch);
if ($parsed) {
// Возврат спарсенной страницы
return $parsed;
}
}