我正在尝试从网页中提取图片。
我正在使用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>
答案 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>';
}
}