PHP cURL не показывает часть контента с некоторой точки - PullRequest
0 голосов
/ 30 марта 2020

Я некоторое время пытаюсь заставить это работать, но мне кажется, что я что-то упустил. Сценарий ios таков:
Я пытаюсь получить некоторую информацию с веб-сайта, используя PHP и cURL через запрос DOMXpath. Я получаю любую информацию до определенного момента, и с этого момента и ниже я ничего не получаю ... пустым. Сценарий, который я использую, выглядит следующим образом:

$target_url = "https[:]//[www][.]bankofalbania[.]org/Tregjet/Kursi_zyrtar_i_kembimit/"; //Remove [ and ] from url
$userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 1000);

$html= curl_exec($ch);
if (!$html) {
    echo "<br />cURL error number:" .curl_errno($ch);
    echo "<br />cURL error:" . curl_error($ch);
    exit;
}

// parse the html into a DOMDocument
$document = new DOMDocument();
libxml_use_internal_errors(true);
$document->loadHTML($html);
libxml_clear_errors();
$selector = new DOMXPath($document);

$anchors = $selector->query('/html/body/div[1]/section[1]/div/div[2]/div[2]/div[2]/div/table[1]/tbody/tr[1]/td[1]');
    foreach($anchors as $div) { 
        $value = $div->nodeValue;
        echo $value;
}

Интересно то, что, если $ якоря изменяется на это
$anchors = $selector->query('/html/body/div[1]/section[1]/div/div[2]/div[2]/div[2]/div/table[1]');
Содержимое извлекается с веб-сайта. Также я должен упомянуть, что я попытался изменить запрос на что-то более прямое, как показано ниже:

$anchors = $selector->query('//table[@class="table table-sm table-responsive w-100 d-block d-md-table table-bordered m-0"]/tbody/tr[1]/td[3]');

, но результаты такие же ... null! Я не знаю, что мне здесь не хватает, но я не могу заставить его работать. То, что я с нетерпением жду, чтобы получить значение USD из таблицы на странице $ target_url.
Заранее спасибо: -)

1 Ответ

1 голос
/ 30 марта 2020

В html нет тегов tbody, и, в отличие от Javascript, PHP не добавляет его автоматически (имейте это в виду, когда используете инструменты разработчика, предоставляемые вашим браузером). Кроме того, сумма в долларах США находится в третьей ячейке, поэтому правильный запрос XPath:

/html/body/div[1]/section[1]/div/div[2]/div[2]/div[2]/div/table[1]/tr[1]/td[3]
...