Не в состоянии scarpe более 90 страниц одновременно с помощью Curl и php?

Я создал скребок для одного из моих клиентов, скребок в основном используется для обхода нескольких веб-сайтов партнеров и получения данных. Скребок блестяще работает до 90 страниц, и как только он достигает 90 страниц, он продолжает сдавать одну и ту же страницу снова и снова. Я действительно смущен, почему это происходит.

может кто-нибудь помочь мне с этим?

function getFlightCharges() {
$requestHeaders = requestHeaderProperties ();
$sql = 'select * from F_charge where enabled = 0';
$details = DatabaseHandler::GetAll ( $sql );
foreach ( $details as $detail ) {
    $link = $detail ['product_link'];
    $id = $detail ['id'];
    $url = $link;
    $referer = 'Referer: example.com/';
    $requestHeaders [] = $referer;
    $html = getHTMLContentFromURL ( $url, $requestHeaders );
    foreach ( $html->find ( '.no-touch' ) as $e ) {
        foreach ( $e->find ( '.content-well' ) as $e1 ) {
            foreach ( $e1->find ( '.price' ) as $prices ) {
                $pricee = strip_tags ( $prices->innertext );
            }
            foreach ( $e1->find ( '.article-body' ) as $desc ) {
                $description = strip_tags ( $desc->innertext );
            }
        }
    }
    $sql = "INSERT INTO price_data(product_price) VALUES (:product_price)";
    $params = array (':product_price' => $price);
    DatabaseHandler::Execute ( $sql, $params );     
}

DatabaseHandler::Close ();
}

Так вот функции, которые получает ссылка на сайт партнера, получает текущую цену и обновляет мою базу данных. Он хорошо работает до 89-й или 90-й страницы. Но вскоре после этого он застревает на 90-й странице и продолжает выскабливать и обновлять его в базе данных

1 ответ

  1. Но вскоре после этого он застревает на 90-й странице и продолжает выскабливать и обновлять его в базе данных

    В основном каждый PHP скрипт ограничен временем его выполнения . Некоторые серверы ограничивают его до 30 секунд. Таким образом, если вы обрабатываете 90 страниц, вы можете выйти из этого ограничения по времени выполнения сценария.

    Решение для вас будет:

    1. Ограничение доступа к числу страниц на запуск сценария.
    2. Выполните cronкоманду для выполнения сценария по расписанию.
    3. Поскольку вы вызываете скрипт в разное время, необходимо добавить маркеры времени в таблицы БД, чтобы сохранить отметку времени последнего обновления записи.