我正在尝试从链接中抓取图像,但是当我使用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>";
}
}
如何让它正确拉动图像链接
答案 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服务的使用,您可以在其中“放置文件内容”。这样您就可以发布图像并获得指向它的链接。但正如我所说,这超出了这个问题的范围,只是一个想法如何实现它......