Как получить парсер HTML-таблицу, которая содержит символ «<» в PHP - PullRequest
0 голосов
/ 25 ноября 2018

Я хочу сделать curl в php, чтобы получить данные в html-таблице на этом сайте: https://bri.co.id/web/guest/deposit-interest-rate. Вот код, который я пытался:

<?php

error_reporting(E_ALL);
$url = "https://bri.co.id/web/guest/deposit-interest-rate";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$html = curl_exec($ch);
curl_close($ch);

$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->validateOnParse = true;
$dom->formatOutput = true;
libxml_use_internal_errors(true);

@$dom->loadHTML($html);

$table = $dom->getElementById('_Deposit_Rate_Display_Portlet_idrRate');

$row = $table->getElementsByTagName('tr')[1];
//var_dump($row);

$cols = $row->getElementsByTagName('td');
echo 'NOMINAL -> ' . $cols->item(0)->nodeValue. '<br />';
echo 'JANGKA WAKTU -> ' . $cols->item(1)->nodeValue.'<br />';
echo 'SUKU BUNGA COUNTER -> ' . $cols->item(2)->nodeValue;

?>

результат:

NOMINAL ->
JANGKA WAKTU -> 1
SUKU BUNGA COUNTER -> 4.75%

Я хочу получить результат:

NOMINAL -> <100 Juta
JANGKA WAKTU -> 1
SUKU BUNGA COUNTER -> 4.75%

проблема заключается в том, что данные содержат символ «<», в котором не отображается пустая строка.Как получить символ синтаксического анализатора "<", чтобы отображать вывод "<100 Джута"? </p>

1 Ответ

0 голосов
/ 25 ноября 2018

Это даст значения - но это не идеальный подход, потому что, если HTML на странице изменится, он потерпит неудачу.

<?php

// Get the HTML
$url = "https://bri.co.id/web/guest/deposit-interest-rate";
$html = file_get_contents($url);

// Find the Rupiah header and discard everything before that
$rupiah = strpos($html,'<h2> Rupiah </h2>');
$chop = substr($html,$rupiah);

// Find he start and end of the Rupiah table
$tableStart = strpos($chop,'<table');
$tableEnd = strpos($chop,'</table>');

// Get the Rupiah table
$table = substr($chop,$tableStart,$tableEnd-$tableStart);

// Get the body of the Rupiah table
$tbodyStart = strpos($table,'<tbody>');
$tbody = substr($table,$tbodyStart+7);

// Get the rows
$rows = explode('<tr>',$tbody);

// Loop through all the rows and when you find the first blank one, get the cells
foreach ($rows as $r) {
        if (trim($r) !== '') {
                $cells = preg_split('#<td[^>]+>#',$r);
                break;
        }
}

// Loop through all the cells and echo out their contents (without any HTML tags)
foreach ($cells as $c) {
        if (trim($c) !== '') {
                echo strip_tags($c).PHP_EOL;
        }
}
...