Не могу использовать loadHTMLfile или file_get_contents для внешнего URL - PullRequest
0 голосов
/ 04 июля 2018

Я хочу знать об активных предложениях Groupon, поэтому пишу скребок, например:

libxml_use_internal_errors(true);

$dom = new DOMDocument();
@$dom->loadHTMLFile('https://www.groupon.com/browse/new-york?category=food-and-drink&minPrice=1&maxPrice=999');
$xpath = new DOMXPath($dom);
$entries = $xpath->query("//li[@class='slot']//a/@href");
foreach($entries as $e) {
  echo $e->textContent . '<br />';
}

но когда я постоянно запускаю эту функцию, браузер загружает что-то, но не выдает никакой ошибки.

Как я могу это исправить? Не только в случае с Groupon - я также пробую другие сайты, но тоже не работаю. ЗАЧЕМ?

1 Ответ

0 голосов
/ 04 июля 2018

Как насчет использования CURL для загрузки данных страницы.

Not just case with Groupon - I also try other websites but also don't work

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

<?php

$dom = new DOMDocument();
$data = get_url_content('https://www.groupon.com', true);
@$dom->loadHTML($data);
$xpath = new DOMXPath($dom);
$entries = $xpath->query("//label");

foreach($entries as $e) {
    echo $e->textContent . '<br />';
}


function get_url_content($url = null, $justBody = true)
{

    /* Init CURL */
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_HTTPHEADER, []);
    $data = curl_exec($ch);
    if ($justBody)
        $data = @(explode("\r\n\r\n", $data, 2))[1];

    var_dump($data);
    return $data;
}
...