2013-04-09 3 views
2

Je veux fondamentalement obtenir TOUS les images dans n'importe quel site Web en utilisant DOMDocument. mais je ne peux même pas charger mon code HTML pour des raisons que je ne connais pas encore.raclant toutes les images d'un site Web en utilisant DOMDocument

$url="http://<any_url_here>/"; 
$dom = new DOMDocument(); 
@$dom->loadHTML($url); //i have also tried removing @ 
$dom->preserveWhiteSpace = false; 
$dom->saveHTML(); 
$images = $dom->getElementsByTagName('img'); 
foreach ($images as $image) 
{ 
echo $image->getAttribute('src'); 
} 

Ce qui se passe est que rien ne s'imprime. ou ai-je fait quelque chose de mal avec le code?

+0

la raison pour laquelle vous ne recevez pas un message d'erreur est probablement cette ligne '@ $ dom-> loadHTML ($ url);' en php le '@' cache tous les messages d'erreur pour cette fonction. –

+0

je l'ai enlevé il y a longtemps mais je n'ai toujours pas eu de résultats ... – Leonid

+0

Vous n'obtenez pas de résultat car '$ dom-> loadHTML()' attend du html. Vous lui donnez une URL, vous devez d'abord obtenir le code HTML de la page que vous voulez analyser. Vous pouvez utiliser 'file_get_contents()' pour cela. (Voir la réponse) –

Répondre

12

You don't get a result because $dom->loadHTML() expects html. You give it an url, you first need to get the html of the page you want to parse. You can use file_get_contents() for that.

J'ai utilisé ceci dans ma classe de capture d'image. Fonctionne bien pour moi.

$html = file_get_contents('http://www.google.com/'); 
$dom = new domDocument; 
$dom->loadHTML($html); 
$dom->preserveWhiteSpace = false; 
$images = $dom->getElementsByTagName('img'); 
foreach ($images as $image) { 
    echo $image->getAttribute('src'); 
} 
+0

J'ai maintenant une classe Attribute redéfinie dans l'erreur d'entité. '$ dom = new DOMDocument; \t \t $ htmls = file_get_contents ("http://philcooke.com/inspiration-happens-but-the-best-ideas-take-time/"); $ dom-> loadHTML ($ htmls); ' – Leonid

+0

votre réponse était presque juste. il suffit d'ajouter un caractère "@" avant '$ dom-> loadHTML ($ html)' – Leonid

+0

Une alternative à ajouter le '@' avant le '$ dom-> loadHTML ($ html)' pour supprimer l'erreur, vous pouvez utiliser bien rangé nettoyer le code HTML en premier. '' '$ tidy = tidy_parse_string ($ html); $ html = $ tidy-> html() -> valeur; '' 'Mais c'est peut-être trop. –

Questions connexes