Получить фоновое изображение с веб-страницы, используя DOM XPATH - PullRequest
0 голосов
/ 04 апреля 2020

Я читаю веб-страницу, используя PHP DOM / XPath, и мне удалось получить нужный мне текст, но сейчас я пытаюсь получить sr c основного изображения, но не могу возьми. Также, чтобы усложнить ситуацию, источник отличается от инспектора.

Вот источник:

<div id="bg">
            <img src="https://example.com/image.jpg" alt=""/>
</div>

А вот элемент в инспекторе:

<div class="media-player" id="media-player-0" style="width: 320px; height: 320px; background: url(&quot;https://example.com/image.jpg&quot;) center center / cover no-repeat rgb(208, 208, 208);" currentmouseover="16">

Я пробовал:

$img = $xpath->evaluate('substring-before(substring-after(//div[@id=\'bg\']/img, "\')")');

и

$img = $xpath->evaluate('substring-before(substring-after(//div[@class=\'media-player\']/@style, "background: url(\'"), "\')")');    

, но ничего не получил ни от одного из них.

Вот мой полный код:

$html = file_get_contents($externalurl);
$doc = new DOMDocument();
    @$doc->loadHTML($html);
    $xpath = new DOMXPath($doc);
    $allChildNodesFromDiv = $xpath->query('//h1[@class="artist"]');
    $releasetitle = $allChildNodesFromDiv->item(0)->textContent;
    echo "</br>Title: " . $releasetitle;

    $img = $xpath->evaluate('substring-before(substring-after(//div[@class=\'media-player\']/@style, "background: url(\'"), "\')")');    
    echo $image;

    $img = $xpath->evaluate('substring-before(substring-after(//div[@id=\'bg\']/img, "\')")');
    echo $image;

1 Ответ

2 голосов
/ 04 апреля 2020

Не то, что я обычно предлагал бы, но поскольку конкретный контент, который вы ищете, загружается из javascript, НО контент находится в тегах <script>, тогда регулярное выражение может быть легко извлечено. Из вашего комментария ...

Ах да, он появляется в: poster: 'https://284fc2d5f6f33a52cd9f-ce476c3c56a27f320262daffab84f1af.ssl.cf3.rackcdn.com/artwork_5e74a44e1e004_CHAMPDL879D_5e74a44e4672b.jpg'

Так что этот код выглядит как значение из poster : '...',.

$html = file_get_contents($externalurl);

preg_match("/poster : '(.*)',/", $html, $matches);
echo $matches[1];

Это может быть склонно к изменениям в html, но пока может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...