PHP Циклы скребка до истечения лимита времени (с использованием простого HTML Dom Parser) - PullRequest
2 голосов
/ 24 февраля 2020

Я пытаюсь вычеркнуть цену одного и того же продукта с двух разных сайтов. Хотя он извлекает правильные результаты и печатает то, что я хочу, при запуске сценария я получаю эту ошибку после правильной печати результатов:

Неустранимая ошибка: максимальное время выполнения 120 секунд, превышенное в [...] в строке 144

Here's a photo of the error

И это мой код:

<?php
//Adds in the simple HTML DOM parser
include ('simple_html_dom.php');

//Defines the Target URL to Scrape
$cbdUrl = "https://cbdstore.co.za/product/africanpure-everyday-cbd-1000mg-30ml/";
$apUrl = "https://africanpure.co/product/everyday-cbd-oil-1000mg-30ml/";

//Defines 'html' as the scraped content from the URL above
$cbdHtml = file_get_html($cbdUrl);
$apHtml = file_get_html($apUrl);

//Creating an array to store all the 'price' classes text from the page     
$cbdPrices = array();

//Fetching all the '.amount' and storying them in the array as plain text.
foreach($cbdHtml->find('div.summary.entry-summary p.price') as $cbdElement)
{
    foreach($cbdElement->find('.amount') as $cbdAmt)
    {
        $cbdPrices [] = $cbdAmt->plaintext;
    }
}   

//Repeating for AfricanPure
$apPrices = array();

foreach($apHtml->find('div.summary-inner div.basel-scroll-content p.price') as $apElement)
{
    foreach($apElement->find('.amount') as $apAmt)
    {
        $apPrices [] = $apAmt->plaintext;
    }
}       


// Writes out CBD Store Price
echo 'CBD Store has the Everday CBD Oil for: ' . $cbdPrices[0];

// Writes out AP Price
echo 'African Pure has the Everday CBD Oil for: ' . $apPrices[0];
?>

1 Ответ

1 голос
/ 24 февраля 2020

Похоже, вас интересует только одна цена для каждой ($cbdPrices[0]), а не массив цен, поэтому попробуйте вырваться из циклов после получения первой цены.

foreach($cbdHtml->find('div.summary.entry-summary p.price') as $cbdElement)
{
    foreach($cbdElement->find('.amount') as $cbdAmt)
    {
        $cbdPrices [] = $cbdAmt->plaintext;
        break;
    }
}

И сделать то же самое на другом. Вы также не могли бы сделать переменную массивом в первую очередь?

...