Очистка страницы в PHP - PullRequest
0 голосов
/ 08 января 2019

Я хочу очистить некоторые данные с помощью парсера Php Simple Dom с soccerstats.com, но не могу, потому что всегда появляется страница cookie перед загрузкой обычной страницы. Как обойти страницу cookie? Мой код такой:

<?php
    include_once('../scrapper/scrapper.php');
    $url = 'https://www.soccerstats.com/matches.asp';
    $html = file_get_html($url);

    $stats = array();
    foreach($html->find('table') as $table) {
        $stats[] = $table->outertext;
    }
    $results = implode(",", $stats);    

    echo $results; 
?>

1 Ответ

0 голосов
/ 08 января 2019

Очень быстрый просмотр страницы https://www.soccerstats.com/matches.asp показал, что на самом деле "страница cookie" действительно заключается в том, что требует, чтобы пользователь нажимал кнопку, которая - при нажатии - просто устанавливает cookie cookiesok до значения yes, как видно из источника на этой странице:

<button class="button button3" onclick=" setCookielocal('cookiesok', 'yes', 365)"><font size='4'>I agree. Continue to website.</font></button>

Итак, нам нужно как-то заставить PHP извлечь страницу с этим набором cookie.

Поскольку вы используете библиотеку https://sourceforge.net/projects/simplehtmldom/ и ее функцию file_get_html(), я изучил исходный код этой функции и обнаружил, что она действительно использует функцию file_get_contents() за кулисами - и в то же время это позволяет нам передавать наш собственный "контекст", который мы можем создать с помощью функции stream_context_create() .

Короче говоря, stream_context_create() позволяет нам создать контекст с необходимыми cookie для использования в функции file_get_html().

Финальный код:

<?php

    include_once '../scrapper/scrapper.php';

    // Options for the context we're about to create.
    $options = [
        "http" => [
            "header" => "Cookie: cookiesok=yes\r\n",
        ],
    ];

    // Context we're going to pass to the file_get_html() function.
    $context = stream_context_create($options);

    $url = 'https://www.soccerstats.com/matches.asp';
    $html = file_get_html($url, false, $context);

    $stats = array();
    foreach($html->find('table') as $table) {
        $stats[] = $table->outertext;
    }
    $results = implode(",", $stats);

    echo $results;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...