2011-01-06 3 views
0

J'essaie de télécharger un fichier en PHP.Comment puis-je extraire les liens d'une page de HTML?

$file = file_get_contents($url); 

Comment dois-je télécharger le contenu des liens dans le fichier $ url ...

+0

Télécharger les liens en appelant file_get_contents en passant le lien en argument. – Oswald

+0

duplication possible de [meilleures méthodes pour analyser HTML] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon

Répondre

0

Vous devez analyser la chaîne HTML résultant, soit manuellement, soit via un plug-in 3rd party.

HTML Scraping in Php

+0

merci Dutchie432 ... –

2

Cela nécessite l'analyse syntaxique HTML, ce qui est tout un défi en PHP. Pour vous éviter beaucoup de problèmes, téléchargez une bibliothèque d'analyse HTML, telle que PHPQuery (http://code.google.com/p/phpquery/). Ensuite, vous devrez sélectionner tous les liens avec pq('a'), les parcourir pour obtenir leurs valeurs d'attribut href, et pour chacun d'entre eux, le convertir de relatif en absolu et exécuter un file_get_contents sur l'URL résultante. J'espère que ces pointeurs devraient vous aider à démarrer.

+0

merci Nathan MacInnes –

1

Vous voulez donc trouver toutes les URL dans un fichier donné? Regex à la rescousse ... et quelques exemples de code ci-dessous qui devrait faire ce que vous voulez:

$file = file_get_contents($url); 
if (!$file) return; 
$file = addslashes($file); 

//extract the hyperlinks from the file via regex 
preg_match_all("/http:\/\/[A-Z0-9_\-\.\/\?\#\=\&]*/i", $file, $urlmatches); 

//if there are any URLs to be found 
if (count($urlmatches)) { 
    $urlmatches = $urlmatches[0]; 
    //count number of URLs 
    $numberofmatches = count($matches); 
    echo "Found $numberofmatches URLs in $url\n"; 

    //write all found URLs line by line 
    foreach($urlmatches as $urlmatch) { 
     echo "URL: $urlmatch...\n"; 
    } 
} 

EDIT: Quand je comprends bien votre question, vous voulez maintenant télécharger le contenu des URL trouvées. Vous le feriez dans la boucle foreach en appelant file_get_contents pour chaque URL, mais vous souhaiterez probablement effectuer un filtrage préalable (comme ne pas télécharger d'images, etc.).

Questions connexes