我正在使用SimpleHTMLDOM来抓取页面(在我以外的服务器中)。
基本实现是
try {
$html = file_get_html(urldecode(trim($url)));
} catch (Exception $e) {
echo $url;
}
foreach ($html->find('img') as $element) {
$src = "";
$src = $element->src;
if (preg_match("/\.(?:jpe?g|png)$/i", $src)) {
$images[] = $src;
}
}
这很好用,但它会返回页面中的所有图像,包括小头像、图标和按钮图像。我当然想避免这些。
然后我尝试在循环中插入如下
...
if (preg_match("/\.(?:jpe?g|png)$/i", $src)) {
$size = getimagesize($src);
if ($size[0] > 200) {
$images[] = $src;
}
}
...
这在像http://cnn.com
. 但在其他情况下,它会返回许多错误。例如
http://www.huffingtonpost.com/2012/05/27/alan-simpson-republicans_n_1549604.html
给出了一堆错误,比如
<p>Severity: Warning</p>
<p>Message: getimagesize(/images/snn-logo-comments.png): failed to open stream: No such file or directory
<p>Severity: Warning</p>
<p>Message: getimagesize(/images/close-gray.png): failed to open stream: No such file or directory
这似乎是由于某些图像中的相对 URL 而发生的。这里的问题是这会使脚本崩溃,然后没有加载任何图像,而我的 Ajax 框将永远加载。
你有任何想法如何解决这个问题吗?