从URL中提取图像 - 仅限jpeg - 一种不同的方法

时间:2012-08-04 16:11:47

标签: php dom

我正在尝试从网页中提取图片。

我正在使用follolwing代码,但它没有输出,虽然我知道那里有一些(以ebay页面为例)

$html = "http://www.ebay.co.uk/itm/190706137456?_trkparms=clkid%3D1088812801530482649&_qi=RTM944765";
$dom = new domDocument;
@$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
echo $image->getAttribute('src');
}

除此之外,还可以只提取jpg图像,然后只提取高于某个高度/宽度尺寸的图像吗?

我最近一直在使用simple_html_dom,但很多时候都失败了,我发现它很慢。

有没有办法,例如,而不是寻找'img'和'src'来找到任何结束'.jpg'的东西,除了'http://...etc等'之外的所有内容。 / p>

1 个答案:

答案 0 :(得分:0)

尝试使用$ dom-> loadHTMLFile()而不是$ dom-> loadHTML。所以......

$html = "http://www.ebay.co.uk/itm/190706137456?_trkparms=clkid%3D1088812801530482649&_qi=RTM944765";
$dom = new domDocument();
$dom->loadHTMLFile($html);

您可以在foreach()循环中过滤图像类型(并获取文件名)。尝试这样的事情:

$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
  $filename = basename($image->getAttribute('src'));
  $ext = pathinfo($filename, PATHINFO_EXTENSION);
  if ($ext == 'jpg') {
     echo $filename . '<br>';
  }
}

您还可以按图像的宽度和高度进行过滤,但看起来很奇怪它的宽度和高度。你可以想象通过使用这些属性......

$width = $image->getAttribute('width');
$height = $image->getAttribute('height');

...它会吐出width =“xxx”和height =“yyy”......但它没有。看起来它需要样式属性。所以记住这一点。话虽这么说,你也可以使用类似于上面的宽度和高度的解决方案。像这样:

$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
   $filename = basename($image->getAttribute('src'));
   $width = $image->getAttribute('width');
   $height = $image->getAttribute('height');
   $ext = pathinfo($filename, PATHINFO_EXTENSION);
   if ($ext == 'jpg' && ($width > 20 && $height > 10)) {
      echo $filename . "($width x $height)" . '<br>';
   }
}

希望这适合你。如果您需要,这就是一切:

$html = "http://www.ebay.co.uk/itm/190706137456?_trkparms=clkid%3D1088812801530482649&_qi=RTM944765";
$dom = new domDocument();
$dom->loadHTMLFile($html);
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
   $filename = basename($image->getAttribute('src'));
   $width = $image->getAttribute('width');
   $height = $image->getAttribute('height');
   $ext = pathinfo($filename, PATHINFO_EXTENSION);
   if ($ext == 'jpg' && ($width > 20 && $height > 10)) {
      echo $filename . "($width x $height)" . '<br>';
   }
}