我正在使用PHP DOM / XPath阅读网页,并且设法获取了所需的文本,但是现在我试图获取主图像的src,但我无法获取它。同样使事情复杂化的是,源与检查员不同。
这里是来源:
<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("https://example.com/image.jpg") 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;
我通常不建议这样做,但是由于您要从javascript加载特定的内容,但是内容位于<script>
标记中,因此对于正则表达式而言,提取它可能很容易。根据您的评论...
[是的,它出现在:海报中: '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中进行更改,但目前可能仍然有效。