@src将信息作为数据拉出:gif而不是直接图像链接

时间:2016-08-27 05:27:40

标签: xpath

我正在尝试从链接中抓取图像,但是当我使用src时,它会将链接作为

  

数据:图像/ GIF; BASE64,R0lGODlhAQABAIAAAAAAAP /// yH5BAEAAAAALAAAAAABAAEAAAIBRAA7

而不是

  

https://www.ordervenue.com/images/thumbnails/170/170/detailed/44/ $ 12 (5).JPGΔT= 1462168530

我的代码如下: -

$url="https://www.ordervenue.com/rs-99-special-store.html";


$html = file_get_contents($url); //get the html returned from the following url

$mydoc = new DOMDocument();

libxml_use_internal_errors(TRUE); //disable libxml errors

if(empty($html)) die("EMPTY HTML");

    $mydoc->loadHTML($html);
    libxml_clear_errors(); //remove errors for yucky html

    $my_xpath = new DOMXPath($mydoc);
    $nodes = $my_xpath->query( '//div[@class="vs-grid vs-grid-table"]' );

    foreach( $nodes as $node )
        {
    $imglink=$my_xpath->query( 'div[1]/div/a/img//@src', $node )->item(0)->nodeValue ;  
    echo $imglink."<br>";
    }
}

如何让它正确拉动图像链接

1 个答案:

答案 0 :(得分:0)

看起来,图像以base64编码格式包含在html的源代码中。要获取原始图像,您需要将字符串解码回二进制数据,因此您可以使用base64_decode。因此,如页面示例中所示,您需要执行以下操作:

//$encodedData is what $imglink is in your code
$encodedData = str_replace('data:image/gif;base64,','',$encodedData);
$decocedData = base64_decode($encodedData);

file_put_contents('/path/to/file/name.gif', $decocedData);

您可以将$decocedData保存在您希望的*.gif文件中。

<强>更新

回答这个问题:

  

如何在上面的代码中使用它来获取链接

简而言之:你做不到。那是因为图像数据包含在html中,所以也没有链接到图像。 (可以说:链接就是数据本身)你拥有图像,如果你需要一个链接,你必须自己创建它,方法是将图像上传到任何可访问的网站空间。

更新#2

请注意,file_put_content()可以处理Streams(php Manual)。即使这超出了这个问题的范围,您可以实现云或Web服务的使用,您可以在其中“放置文件内容”。这样您就可以发布图像并获得指向它的链接。但正如我所说,这超出了这个问题的范围,只是一个想法如何实现它......