0

Web ページから画像を抽出しようとしています。

私は次のコードを使用していますが、そこにいくつかあることは知っていますが、出力はありません(例として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..」の前のすべてを取り除く方法はありますか?

4

1 に答える 1

0

$dom->loadHTML の代わりに $dom->loadHTMLFile() を使用してみてください。そう...

$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>';
   }
}
于 2012-08-04T16:47:14.697 に答える