Извлечь определенный промежуток - PullRequest
0 голосов
/ 28 декабря 2018

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

вот рассматриваемый диапазон

<span data-currency-market="" data-usd="63968175026.0">

Я хочу только значение data-usd

 $html1 = file_get_contents( 'https://url.com' );
 $dom1 = new DOMDocument();
 @$dom1->loadHTML( $html1 );
 foreach ($dom1->getElementsByTagName('span') as $tag) {
    echo $tag->nodeValue . '<br/>';
 }

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Чтобы сделать это правильно с помощью DOM, вы можете использовать XPath, чтобы найти все элементы span с атрибутом data-usd.XPath - это просто //span/@data-usd, где @ обозначает атрибут.Вызов query() возвращает список совпадающих узлов, так что вы просто циклически повторяете то же самое, что и с getElementsByTagName().

$html1 = '<div><span data-currency-market="" data-usd="1">
<span data-currency-market="" data-eur="2">
<span data-currency-market="" data-usd="3">
<span data-currency-market="" data-eur="4"></div>';

//$html1 = file_get_contents( 'https://url.com' );
$dom1 = new DOMDocument();
$dom1->loadHTML( $html1 );
$xp = new DOMXPath($dom1);
$dataUSD = $xp->query("//span/@data-usd");
foreach ($dataUSD as $tag) {
    echo $tag->nodeValue . '<br/>';
}

, который с тестовыми данными возвращает ...

1<br/>3<br/>
0 голосов
/ 28 декабря 2018

Вы можете использовать preg_match_all вот так

<code><?php

    // Loading data for demo
    $html1 = '[...]
    <span data-currency-market="" data-usd="63968175026.0"></span>
    <span data-currency-market="" data-usd="63968175026.0"></span>
    <span data-currency-market="" data-usd="63968175026.0"></span>';

    // Your data source
    //$html1 = file_get_contents( $string );

    preg_match_all('/usd="(.*)"/', $html1, $output_array);

    // Showing array
    echo "<pre>";
    print_r($output_array);
    echo "
";?>

Будет выводить это:

enter image description here

Если вам нужны только цифры, которые вам нужны

print_r($output_array[1]);

enter image description here

Итак, в конце все, что вам нужно, - это 2 строки кода

$html1 = file_get_contents( $string );
preg_match_all('/usd="(.*)"/', $html1, $output_array);

Вы можете использовать

foreach($output_array[1] as $key=>$value){
    echo $value;
}

для получения значений

Если вы ожидаете только одно совпадение на этой странице, вы можете использовать preg_match таким же образом, как это вместо этогоof preg_match_all

<?php
    $html1 = '[...]
    <span data-currency-market="" data-usd="63968175026.0"></span>
    <span data-currency-market="" data-cad="73175026.0"></span>
    <span data-currency-market="" data-eur="83968176.0"></span>';
    //$html1 = file_get_contents( $string );
    preg_match('/usd="(.*)"/', $html1, $output_array);

    echo $output_array[1];
?>

Будет выводить: 63968175026.0

...