Всем привет! У меня возникла потребность в парсере информации с нескольких сайтов. Код парсинга сам работает нормально, но есть проблема: Я ставлю в коде парсера паузу PHP: sleep(2); и у меня сразу вываливается ошибка "Error 500: Internal Server Error". Я как понимаю это связано с таймаутом, установленным на хостинге для выполнения пхп-скрипта. И я пытался решить эту проблему. А решил я ее так, я сначала записывал контент страницы в тхт файл и потом уже выдирал из этого файла нужную инфу с паузой 0 PHP: sleep(0); и у меня все работает. Собственно вопрос, можно ли так делать, т.к. насколько я знаю что если парсить сам сайт с паузой 0, то меня как-то заблокируют? Код скрипта приведен ниже: PHP: <?php $ch = curl_init("адрес страницы для скачивания контента"); $h = fopen("my_file.txt","w"); curl_setopt($ch, CURLOPT_FILE, $h); curl_setopt($ch, CURLOPT_HEADER, 0); $content = curl_exec($ch); curl_close($ch); if (fwrite($h,$ch)) echo "Запись произведена успешно"; else echo "Произошла ошибка при записи данных"; fclose($h); $ch = curl_init (); curl_setopt ($ch , CURLOPT_URL , "адрес файла с контентом для последующего парсинга"); curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 ); $content = curl_exec($ch); curl_close($ch); preg_match_all("/регулярное выражение для шаблона поиска/>/isU", $content, $matches, PREG_PATTERN_ORDER); for ($i = 0; $i < count($matches[1]); $i++) { echo $matches[1][$i]."<br>"; flush(); sleep(0); } ?>
Потому-что вы запрашиваете сначала одну страницу, затем вторую. В сети существует такое понятие как пинг. Поэтому между первым и вторым запросом будет некая задержка, чуть больше текущего пинга + тормознутость серверов + Посмотрите как работают браузеры. Сначала вытаскивают с сервера HTML, и тут же тащат все что прилагается к странице: картинки, css, javascript. Почти всё разом, на одном дыхании. Есть конечно ограничения у браузеров, например у FireFox'а максимум одновременных соединений 6 (по умолчанию)
А как тогда мне обойти ошибку "Error 500: Internal Server Error". Т.к. если я ставлю паузу даже в секунды, скрипт уже не выполняется?
Devzirom, спасибо большое что помогаешь! Периодичность парсинга у меня будет не чаще 1 раза в сутки, а то и реже. Т.е. я могу спокойно парсить таким способом? И правильно я тебя понимаю, ты мне предлагаешь перед парсингом откидывать все ненужное из контента?...
Не я, так другой бы ответил Да Я этого не писал =) Вы спросили, про блокировку - я ответил. Что сохранить, а что откинуть, решайте сами
Сори, если вопрос тупой, но все-таки: у меня этот скрипт лежит в отдельной директории сайта, я установил basic аунтефикацию через htaccess и htpasswd. И когда я запускаю этот скрипт, сначала меня проист залогиниться, я логинюсь, потом выполняется скрипт (ошибок нет, файлы создает), но почему-то ничего не выводит на экран, а должно выводиться спарсенная из этих файлов инфа. Я как понимаю косяк в доступе к файлам... Помогите пожалуйста решить эту проблему
Может плохо объяснил, попробу по другому... есть файл 1.php: PHP: <?php $x = array ("мама", "папа", "брат"); ?> есть файл 2.php: PHP: <?php include ("1.php"); $y = $x; echo $y[2]."<br>"; ?> есть файл .htaccess: Код (Text): DirectoryIndex 2.php Options -Indexes AuthType basic AuthName 'Authorization...' AuthUserFile '/folder1/folder2/folder3/folder4/sitename.ru/xxx/.htpasswd' Require valid-user есть файл .htpasswd: Код (Text): username:userpassword Так вот, если вызвать 2.php без наличия файла .htaccess, то мне на экране высветит результат "брат". Но если вызвать 2.php при наличии файла .htaccess, то будет пустой экран. Еще я заметил, что если в файле 2.php вместо PHP: echo $y[2]."<br>"; написать PHP: echo $y."<br>"; , то на экран высветит "array". И я не могу решить эту проблему... Люди добрые - отзовитесь.