Всем привет! Есть два вопроса про парсинг. 1) Написал функцию генератор строки (последовательной). При каждом вызове функции возвращается строка: PHP: getString(); // aaa getString(); // aab getString(); // aac ... getString(); // zzz getString(); // aaaa getString(); // aaab getString(); // aaac ... Функцию использую в цикле, 'http://'.getString().'ru' - получаю ссылку. И при помощи file_get_contents получаю код сайта (если нет ошибки). Далее ищу в коде необходимую мне информацию и если таковая имеется, то помещаю домен в массив. Т.е. я проверяю все сайты подряд на нужную мне информацию. Но есть одна проблема: Fatal error: Maximum execution time of 30 seconds exceeded in Z:\home\w.ru\www\index.php on line 20 Можно ли ее обойти, эту проблему? ---------------------------------------------------------------------------------------------------------------- 2) И вопрос второй: Насколько законно парсить сайты? Я так понимаю что DOS-атака это когда с определённого источника появляется большое количество запросов на некоторый инернет-ресурс. Когда мы переходим "красную черту"? Писал заказчику парсинг погоды, при каждом обновлении, сайт заказчика обращается к сайту погоды, выхватывает с него инфу. Является ли это нарушением? Спасибо!
Сходу и без заморочек, просто увеличить время исполнения скрипта в настройках php, гуглится на раз два. Или же пересмотреть свой код найти узкие места, разбить на более мелкие задачи, добавить проверки на ожидание ответа и т.д Никто не запрещает, могут только обидеться, ну ли выставить если в коммерческих целях используешь их контент без согласования.
"пересмотреть свой код найти узкие места" - там всего 2 функции по 15 строк каждая. Они работают быстро, проблема в скорости загрузки сайтов, к которым я обращаюсь, как бы я не хотел, но каждый сайт грузится и этого я изменить не могу)) Увеличить время исполнения скрипта можно, но тоже не выход, вопрос в другом. Может ли скрипт PHP работать сутками? Т.е. сутками перебирать сайты. Скажем перебрать 100000 сайтов и по окончании вывести отчёт. Способен ли PHP на это? Спасибо!
многопоточный curl юзаешь? если нет, то он изменит твоё представление о работе с большим кол-вом запросов
1) вынеси тело цикла в отдельный скрипт php и запускай его через exec("/usr/bin/php/path/to/script.php"); 2) запускай тело цикла в форках https://habr.com/post/148688/