Как улучшить производительность моего кода для парсинга товаров с веб-сайта? Сейчас скрипт выполняется долго и выдает ошибку из-за превышения времени выполнения. Вот краткий обзор шагов кода: <br/> <br/>
1. Получение количества страниц в категории; <br/>
2. Парсинг товаров с каждой страницы; <br/>
3. Извлечение цен и названий товаров на каждой странице. <br/>
При запуске скрипта возникает ошибка: Fatal error: Maximum execution time of 30 seconds exceeded... Как можно ускорить выполнение скрипта и избежать этой проблемы? <br/> <br/>
<pre><code class="php"><?php
use Symfony\Component\BrowserKit\HttpBrowser;
use Symfony\Component\HttpClient\HttpClient;
class Agrostadion {
public function getParse() {
$paginate = 1;
$browser = new HttpBrowser(HttpClient::create());
$crawler = $browser->request('GET', "https://agrostadion.com/catalog/zasobi-zakhystu-roslyn/herbitsydy/");
$paginate = $crawler->filter(".module-pagination")->eq(0);
$paginate_array = explode(' ',$paginate->text());
foreach($paginate_array as $key => $value){
if(!is_numeric($value)){
unset($paginate_array[$key]);
}
}
$paginate_count = array_pop($paginate_array);
for($i=1; $i<=$paginate_count; $i++) {
$response = $browser->request('GET', 'https://agrostadion.com/catalog/zasobi-zakhystu-roslyn/?PAGEN_1='.$i);
$response->filter('.catalog_block div .catalog_item_wrapp .inner_wrap .item_info .ite
Для улучшения производительности вашего кода для парсинга товаров с веб-сайта и избежания ошибки "Maximum execution time exceeded" рекомендуется использовать многопоточность и оптимизировать запросы к серверу. Примерный алгоритм оптимизированного кода может выглядеть следующим образом: 1. Разбить парсинг каждой страницы на отдельный поток или процесс, чтобы выполнение было асинхронным. 2. Использовать асинхронные запросы вместо синхронных для получения содержимого каждой страницы товаров. Например, для этого можно использовать библиотеку GuzzleHttp. 3. Оптимизировать селекторы CSS для фильтрации содержимого страницы, чтобы избежать избыточного выполнения скрипта и ускорить парсинг. В дополнение к этому вы можете использовать кеширование данных, чтобы избежать повторных запросов к серверу при перехвате тех же страниц товаров. Применение этих шагов должно помочь вам ускорить выполнение скрипта и избежать проблем с превышением времени выполнения.
парсинг это не самая простая задача. И не самая быстрая. По этому нормально что парсинг происходит не очень быстро, а настройки сервера не позволяют довести дело до конца. <br/> Варианты: <br/> 1) разбивайте парсер на части, где каждый шаг сохраняет результат в промежуточной таблице с полем "обработано", и вызывайте его последовательно, как отдельные скрипты <br/> 2) Отключите ограничение на время работы скрипта, это делается либо в конфиге пхп, либо командой set_time_limit(0); Но возможно что ограничения сервера не позволят вам этого сделать. <br/> 3) Запускайте скрипт из консоли, правда придется переписать его так, чтобы лара смогла его запустить, не помню навскидку как там организуется работа с cli скриптами, в других фреймворках часто есть возможность запустить конторллер из командной строки. В зенде вроде есть возможность использовать CliController. <br/> 4) Очереди, раббитмкю как вариант. Формируйте очередь из задач, и они будут выполняться одна за другой как отдельные задачи.