#14377 - Note : PHP récupérer titre d’une page
On peut faire de plein de moyens différents, généralement on passe par des preg_grep(), mais on a aussi le problème de l’encodage qu’il faut gérer.
Voilà une solution que je teste pour le moment avec assez de succès :
Ça utilise bien-sûr les lib intégrées à PHP pour parser du HTML. Évidemment, ça retournera plein d’erreurs si le HTML n’est pas valide (99% des pages web), donc j’ajoute aussi ça :
Ça va laisser les erreurs de code dans la lib de parsage. Libre à vous de les ignorer ou non, mais elles ne viendront plus s’afficher en HTML.
N’oubliez pas d’ajouter les gardes-fou habituels : URL ne répond pas, URL n’est pas du HTML, etc.
Autrement, voilà :
— mon code de récupération d’une page Web en PHP (avec cURL)
— le même code, mis à jour pour les pages qui sont Gzipé par défaut
cURL me permet de faire une requête qui envoie des headers complètes (avec UA et autres, pour passez un éventuel "UA-gate"), de suivre les redirections, d’accepter les cookies et d’autres.
Avec ça je fais à peu près le tour.
Sinon, pour faire 150 requêtes en parallèle, file_get_contents() ne vous servira pas. CURL permet de le faire : http://lehollandaisvolant.net/?d=2014/05/20/19/21/36-php-faire-plusieurs-requetes-http-simultanees-avec-curl
Voilà une solution que je teste pour le moment avec assez de succès :
$url = "http://example.com/"; $html_source = file_get_contents($url); $dom_tree = new DOMDocument(); $dom_tree->loadHTML($html_source); $titles = $dom_tree->getElementsByTagName('title'); $title = trim($titles->item(0)->nodeValue); return $title;
Ça utilise bien-sûr les lib intégrées à PHP pour parser du HTML. Évidemment, ça retournera plein d’erreurs si le HTML n’est pas valide (99% des pages web), donc j’ajoute aussi ça :
libxml_use_internal_errors(true); // dom parsing libxml_clear_errors();
Ça va laisser les erreurs de code dans la lib de parsage. Libre à vous de les ignorer ou non, mais elles ne viendront plus s’afficher en HTML.
N’oubliez pas d’ajouter les gardes-fou habituels : URL ne répond pas, URL n’est pas du HTML, etc.
Autrement, voilà :
— mon code de récupération d’une page Web en PHP (avec cURL)
— le même code, mis à jour pour les pages qui sont Gzipé par défaut
cURL me permet de faire une requête qui envoie des headers complètes (avec UA et autres, pour passez un éventuel "UA-gate"), de suivre les redirections, d’accepter les cookies et d’autres.
Avec ça je fais à peu près le tour.
Sinon, pour faire 150 requêtes en parallèle, file_get_contents() ne vous servira pas. CURL permet de le faire : http://lehollandaisvolant.net/?d=2014/05/20/19/21/36-php-faire-plusieurs-requetes-http-simultanees-avec-curl