Получить данные из URL на основе данных внутри диапазона - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь получить данные из URL-адреса и получать данные только из диапазона, который имеет заголовок = "" Каждая "строка" данных имеет диапазон с другим инкрементным значением заголовка, например

title="1", title="2"

поэтому данные, которые я хочу получить, будут в этом диапазоне ДАННЫЕ ЗДЕСЬ x будет инкрементным числом

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

function file_get_contents_curl($url)
{
$ch = curl_init();

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

$data = curl_exec($ch);
curl_close($ch);

return $data;
}
$html = file_get_contents_curl("http://www.example.com");
//parsing all content:
$doc = new DOMDocument();
@$doc->loadHTML($html);
echo "$html";

Данные форматируются как:

<span id="RANDOMINFO">
 <a href="/DEMO/RANDOMDATA">+</a>
 <span title="1">DATA I WANT HERE</span> 
<a href="https://URL.COM/RANDOM">CLICK</a> 
<a href="https://URL.COM/RANDOM">RANDOM DATA</a>
</span>
<span id="RANDOMINFO">
 <a href="/DEMO/RANDOMDATA">+</a>
 <span title="2">DATA I WANT HERE</span> 
<a href="https://URL.COM/RANDOM">CLICK</a> 
<a href="https://URL.COM/RANDOM">RANDOM DATA</a>
</span>

1 Ответ

0 голосов
/ 03 октября 2018

Решение: Объяснение доступно в виде комментариев в предоставленном коде

$doc = new DOMDocument();
@$doc->loadHTML($html);

foreach($doc->getElementsByTagName('span') as $element ) { //Loops through all available span elements
    if (empty($element->attributes->getNamedItem('id')->value) || $element->attributes->getNamedItem('id')->value != 'RANDOMINFO') { // Discards irrelevant span elements based on their `ID`. A similar sorting is achieved with `empty()` as the target `span` doesn't have any associated `ID`.
        echo get_inner_html($element).PHP_EOL; 
    }
}


function get_inner_html( $node ) {
    $innerHTML= '';
    $children = $node->childNodes;

    foreach ($children as $child) {
        $innerHTML .= $child->ownerDocument->saveHTML( $child ); //fetches the text inside child elements of the targeted element
    }

    return $innerHTML;
}

Вывод:

DATA I WANT HERE
DATA I WANT HERE

Ссылки:

  1. DOMDocument :: getElementsByTagName
  2. DOMNamedNodeMap :: getNamedItem
  3. DOMDocument :: saveHTML
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...