Comment obtenir le contenu (données) d'un autre site avec PHP
Mars 28, 2008 7 commentaires
Prendre le contenu d'un autre site a été la tâche qui avait à faire. J'ai pensé qu'il serait facile, mais les choses se sont exactement comme je l'ai prévu… Heureusement, a réussi! Apprenez, vous aussi, et de recueillir des informations provenant d'autres sites Web sur Internet.
La mission: obtenir le contenu d'un site
Aujourd'hui, au travail, a pour tâche de "tirer" certaines données d'un site à "greffe" dans un extrait d'un site Web que je suis aider à se développer. Lors de ma dernière tâche dès rappeler un moment où un ami a fait la même chose (et, à ce moment-là, il m'a expliqué, plus ou moins, il l'a fait). Je pensais qu'il serait très facile à accomplir la tâche, mais dans le temps », a rappelé" que je ne suis pas aussi bonne que les Gevã… rsrs
La solution: des fonctions de PHP et des expressions régulières
J'ai passé pour la recherche sur le Web, cherchent désespérément de documents de référence sur les expressions régulières (qui, comme vous le verrez, est un des piliers pour obtenir la réalisation de certains contenus d'un autre site). Espace de recherche, cherchez là pour bavarder avec les Gevã basculé sur j'essaie de mieux comprendre ces expressions régulières. Avant cela, en utilisant un peu de "gambiarra", a réussi à atteindre mon objectif.
La première chose à faire est de récupérer tout le contenu de la page que vous voulez "manipuler". À cette fin, utilise, par exemple, la fonction file_get_contents (). Jouer le contenu du site dans une variable, serait bien ( 'll faire un exemple avec le même site qui avait pour déplacer):
1 | $ Url = file_get_contents ( 'http://www.bcb.gov.br/'); |
Prêt, contient désormais la variable $ url, string, tout le contenu de la page d'accueil de la BCB.
Les expressions régulières
Donc, ici c'était facile, difficile la capture n'est que la partie de la page que je voulais… Pour cela, vous devez utiliser les expressions régulières!
Si vous ne savez pas ce que sont les expressions régulières, il va un bref (et incomplet…) explication de ce que sont les expressions rationnelles, du contenu de Wikipédia:
Une expression régulière dans la technologie de l'information, définit une norme à utiliser pour obtenir ou remplacer des mots ou groupes de mots. It's a must pour effectuer des recherches de certaines portions de texte.
Avec les expressions régulières est possible d'identifier des extraits de mots ou groupes de mots qui correspondent ( "match") à un certain niveau ( "pattern"), qui est "ordinaire".
Le PHP dispose de plusieurs fonctions natives de travail avec les expressions régulières. Il suffit de savoir que chaque service et une utilisation correcte de meneira.
Eh bien, la prochaine étape en vue de résoudre le problème est d'identifier le modèle que vous voulez extraire le site. Dans le cas, j'avais besoin d'un tableau avec certains des taux de change (se trouve sur la droite, le site de la BCB). Notant le code source, j'ai vu que l'information est dans un tableau (sémantiquement correcte!); De plus, ce tableau est entouré entre les commentaires HTML "<! - - ACCUEIL INDICATEURS - ->" et "<- - FIMINDICADORES -- --> ". C'est une bonne chose, car elle facilite plutôt à "identifier la configuration."
Expliquer mieux: le modèle recherché dans cette affaire, est tout ce qui est entre les commentaires HTML "<! - - ACCUEIL INDICATEURS - ->" et "<- - FIMINDICADORES - ->." L'ensemble du tableau est là, pour mon bonheur! :-)
Alors, que devons-nous faire est d'utiliser une fonction PHP (par cas, a choisi le preg_match_all ()) pour rechercher une expression régulière dans la variable $ url, qui contient toute la première page du site est l'endroit où la table.
Après beaucoup de temps essais vááárias les expressions régulières, je suis venu à la conclusion que ferait un petit mutreta. Mais d'abord, permettez-moi de montrer comment le code est jusqu'à présent.
1 2 | $ Url = file_get_contents ( 'http://www.bcb.gov.br/'); preg_match_all ( '/ minerais - >(. )<!--/ s', $ url, $ contenu); |
Explication: le premier argument de la fonction, est la norme que je cherche, la deuxième, est l'endroit où je vais essayer et la troisième, garde dans un tableau toutes les occurrences des mots recherchés. Pour la plupart des cas, il mai ont été bonnes, ici, mais je n'ai eu aucun problème, encore besoin d'un peu plus de lignes de code.
Actuellement, la variable $ contenu contient un tableau avec les occurrences trouvées. L'utilisation d'un print_r (), découvert en quelle position, exactement ce que je cherchais: le contenu [0] [0].
Faire un "mutreta"
Pour faire un tel "mutreta", le jeu contenu de la matrice position à une autre variable (afin de faciliter la manutention).
1 2 3 | $ Url = file_get_contents ( 'http://www.bcb.gov.br/'); preg_match_all ( '/ minerais - >(. )<!--/ s', $ url, $ contenu); affichage $ = $ Contenu [0] [0]; |
Il y avait des extraits de ce que j'étais retourné (c'est-à-dire le tableau avec les taux de change) que je n'ai pas envie d'apparaître sur le site (comme certains liens). J'ai donc décidé de les retirer par la fonction str_replace (), qui remplace certaines parties de cordes. Il est possible, comme un argument, passez un tableau. Donc, pour le moment et la fin, le code est le suivant:
1 2 3 4 5 | $ Url = file_get_contents ( 'http://www.bcb.gov.br/'); preg_match_all ( '/ minerais - >(. )<!--/ s', $ url, $ contenu); affichage $ = $ Contenu [0] [0]; retirer $ = array ( "la plupart des devises', 'Copom minutes',' plus', 'ORES ->','<!--'); $ display = str_replace ( $ Retirer,'', $ affichage); |
En d'autres termes, où quelques-uns des éléments apparaissent dans le tableau $ $ retirer un écran, sera remplacé par "" (rien…). Il est à noter que les deux derniers éléments du tableau sont la «pollution», inutile, qui est venu en raison de ma paresse à verser régulièrement une expression plus élaborés. :-)
Enfin…
Après cela, il suffit de mandar affichage sur l'écran que "sobrou" couper le contenu de la page d'accueil du site BCB.
1 2 3 4 5 6 | $ Url = file_get_contents ( 'http://www.bcb.gov.br/'); preg_match_all ( '/ minerais - >(. )<!--/ s', $ url, $ contenu); affichage $ = $ Contenu [0] [0] </ span>; retirer $ = array ( "la plupart des devises', 'Copom minutes',' plus', '$ MINERAIS ->','<!--') display = str_replace ($ retirer,'', $ affichage); echo $ affichage; |
Et si le serveur ne permet pas la fonction file_get_contents ()?
Il existe de nombreux serveurs qui, pour diverses raisons (principalement «sécurité»), ne permettent pas d'utiliser la fonction file_get_contents (). Pour ces cas, il est possible de placer une variable page externe tout en utilisant le code suivant (après vous demander des explications dans le manuel officiel de PHP):
1 2 3 4 5 6 7 | $ Ch = curl_init (); $ timeout = 0; curl_setopt ($ ch, CURLOPT_URL, "O_SITE_QUE_VOCE_QUER '); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_CONNECTTIMEOUT, $ timeout) $ content = curl_exec ( $ Ch); curl_close ($ ch); |
Ensuite, le contenu de la page "O_SITE_QUE_VOCE_QUER" sera dans la variable $ contenu.
Conclusion
Ensuite, le personnel, de retirer une partie du contenu d'un site Web (en utilisant PHP), les étapes sont les suivantes:
- En savoir quelle page est que le contenu est précis;
- Jouez le contenu du site dans une variable;
- Extrait les mots que vous voulez utiliser les expressions régulières;
- Si nécessaire, couper quelques choses plus le résultat de l'ER;
- D'écran dans le résultat final.
Le grand bond du chat dans ce cas est de savoir si le traitement avec les expressions régulières; chose, je informer, mais vous apprendrez faire! Et fait beaucoup! Lire les références à la fin de cet article et trouver plus d'informations sur l'Internet à ce sujet.
Une autre chose importante est la suivante: s’il vous plaît garder à l'esprit que, vous prenez le contenu d'un site où ce changement de sa structure, vont très probablement être nécessaire de modifier l'expression régulière, trop.
Soyez conscient d'une chose: si vous, développeur web, pas encore précisé l'utilisation des expressions régulières, vous pouvez être assuré que son heure va venir!
Références National
Les expressions régulières - Guide d'utilisation rapide à la consultation
C'est le guide de Jargas Aurèle-Marin, excellente pour apprendre les expressions régulières et de consulter en temps de durcissement!
Les expressions régulières en PHP
Article de la vie dans le Linux, Marcelo Santos Araujo, avec une introduction sur les expressions régulières.
Références International
Site dédié à des expressions régulières.
Bibliothèque virtuelle des expressions régulières.
Pour tester les expressions régulières en temps réel!














Excellent, sr.Tárcio! Vous avez un citron et faites une limonade. L'article est de très bonne qualité, félicitations!
Je vous remercie, Votre Gevã!
50% est votre crédit! = D
Abraços!
Rappelez-vous que, grâce à l'utilisation de pages XHTML dans la structure de ce n'est pas nécessaire, depuis l'extraction des données peut être fait exactement la même manière que des extraits de données XML.
@ Rafael Eduardo Kassner
Salut, Rafael, OK?
Très intéressant que vous avez mentionné! Il pourrait constituer un exemple pour que nous puissions apprendre?
Abraços!
Merci à portée de main!
Les gens qui veulent approfondir, vai Y at-il un lien sur une grande ER:
http://guia-er.sourceforge.net/
Pour moi, il a été très utile!
@ Juliano
Je vous remercie d'avoir rappelé le site de Aurèle. Mieux même acheter le livre est la référence qu'il a faite, mais pour des consultations en ligne, il est très bon!
Merci de votre visite!
Trackback le 26 août, 2008