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 ボックスが永久に読み込まれることです。
これをトラブルシューティングする方法はありますか?