Comment récupérer le texte d'un fichier html
Fermé
lolonaute97
Messages postés
27
Date d'inscription
samedi 26 mars 2011
Statut
Membre
Dernière intervention
14 janvier 2012
-
12 avril 2011 à 19:01
ktm620enduro Messages postés 293 Date d'inscription mardi 21 septembre 2010 Statut Membre Dernière intervention 12 mars 2013 - 16 avril 2011 à 19:00
ktm620enduro Messages postés 293 Date d'inscription mardi 21 septembre 2010 Statut Membre Dernière intervention 12 mars 2013 - 16 avril 2011 à 19:00
A voir également:
- Comment récupérer le texte d'un fichier html
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
- Comment récupérer un compte facebook piraté - Guide
6 réponses
ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
38
Modifié par ktm620enduro le 13/04/2011 à 16:42
Modifié par ktm620enduro le 13/04/2011 à 16:42
en php ce type de programme se résume en deux lignes
Abandonne ce qui te trouble au profit de ce qui apaise ton coeur.
if (preg_match('#ffoooo">([^<]+)#i',file_get_contents('http://www.meteo.fr/temps/domtom/La_Reunion/EMD/orages/orages.html'),$r)) echo $r[1];
Abandonne ce qui te trouble au profit de ce qui apaise ton coeur.
ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
38
15 avril 2011 à 14:46
15 avril 2011 à 14:46
merci heyquem d'apporter des coups de mains pour résoudre ce sujet. Il me faudrai les 2 versions, avec et sans alerte afin de pouvoir déterminer la regex qui peut matcher les deux. Si tu peux me pondre les 2 versions en .html en faisant "enrgistrer sous" ca serai bien lolonaute97. A bientot, quand tu m'auras pondu ça je te sortirai le code qui fonctionne a touts les coups ;)
lolonaute97
Messages postés
27
Date d'inscription
samedi 26 mars 2011
Statut
Membre
Dernière intervention
14 janvier 2012
15 avril 2011 à 14:58
15 avril 2011 à 14:58
IL Y A UNE ALERTE EN COURS. en ce moment tu peux avoir le code html de l'alerte sur http://www.meteo.fr/temps/domtom/La_Reunion/EMD/orages/orages.html
Vas y avant demain matin 7h. heure de la réunion car l'alerte ne sera plus d'actualité demain.
Vas y avant demain matin 7h. heure de la réunion car l'alerte ne sera plus d'actualité demain.
ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
38
15 avril 2011 à 15:01
15 avril 2011 à 15:01
tu pourrais le faire stp car je ne suis pas chez moi actuellement... donc c'est pas facile de stocker quelquechose que je vais récupérer demain... ? merci...
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 15/04/2011 à 15:27
Modifié par heyquem le 15/04/2011 à 15:27
Je viens d'enrgistrer le code source de la page actuelle avec bulletin complet.
Le fichier fait 94639 octets.
S'il faut vous l'envoyer , dites moi comment, c'est un peu lourd pour le mettre sur CCM
Je ne fais pas 'Enregistrer sous' pour faire ce genre d'enregistrement , car je ne comprends pas bien ce qui se passe en coulisse.
J'utilise un programme de 6 lignes pour capter le code source et l'enregistrer en mode binaire qui conserve intégralement tous les caractères.
Je ne comprends pas bien : quelle est la difficulté pour enregistrer le code source d'une page web ?
PS: je n'avais pas enregistré la page en l'absence de bulletin. Mais en reprenant mon code, il va être facile de progresser
Le fichier fait 94639 octets.
S'il faut vous l'envoyer , dites moi comment, c'est un peu lourd pour le mettre sur CCM
Je ne fais pas 'Enregistrer sous' pour faire ce genre d'enregistrement , car je ne comprends pas bien ce qui se passe en coulisse.
J'utilise un programme de 6 lignes pour capter le code source et l'enregistrer en mode binaire qui conserve intégralement tous les caractères.
Je ne comprends pas bien : quelle est la difficulté pour enregistrer le code source d'une page web ?
PS: je n'avais pas enregistré la page en l'absence de bulletin. Mais en reprenant mon code, il va être facile de progresser
ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
38
15 avril 2011 à 15:36
15 avril 2011 à 15:36
ok alors a demain pour la suite; quand on aura les deux versions ;)
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
15 avril 2011 à 15:38
15 avril 2011 à 15:38
Mais bon, ce n'est pas la peine d'attendre demain pour pouvoir écrire le code suivant:
import re import urllib url = 'http://www.meteo.fr/temps/domtom/La_Reunion/EMD/orages/orages.html' sock = urllib.urlopen(url) ch = sock.read() sock.close() RE1 = (' BULLETIN DE VIGILANCE ORAGES\n' " </div>\n <div id='references_preview'>\n" ' Bulletin du \d\d/\d\d/20\d\d\n' " <br>\n </div>\n <div id='texte_bulletin'>\n <b>\n" ' <font color="#FFOOOO">\n' " (.+?)\n" ' </font>\n </b>\n </div>\n </body>\n </html>') RE2 = (' BULLETIN DE VIGILANCE ORAGES\n' " </div>\n <div id='references_preview'>\n" ' (Bulletin nº \d+ du \d\d/\d\d/20\d\d à \d\d h \d\d locales,)<br>\n' ' (valable du \d\d/\d\d/20\d\d\ à \d\d\ heures' ' au \d\d\/\d\d\/20\d\d à \d\d\ heures locales.)\n' ' </div>\n' " <div id='texte_bulletin'>\n" '(.+?)' '<strong>ZONAGE DES RISQUES:</strong>(.+?)</div>\n' "<div id='carte_et_climato'>" '.+?' 'h2>ZONAGE DU RISQUE</h2>' '(.+?)' "\n </div>\n <div id='preview_conseils'>\n") mat = re.search(RE1,ch) if mat: print mat.group(1) else: li = re.search(RE2,ch,re.DOTALL).groups() print 'li[0] :\n',li[0] print print 'li[1] :\n',li[1] print print re.sub('</?p>','',li[2]).strip() print print 'li[3] :\n',li[3] print print re.findall('Risque d.+?(?=</p>)',li[3]) print print 'li[4] :\n',li[4] print print re.findall('<br><b>(Zone.+?)(?=<br><b>|\Z)',li[4])
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
12 avril 2011 à 19:58
12 avril 2011 à 19:58
Bonjour,
Quel langage de programmation utilises-tu ?
Il faut capter le code source de la page en question et la parser avec un parseur ou l'analyser avec une regex, et tu extrais ainsi la portion que tu désires
En Python, ça se fait en moins de deux
Quel langage de programmation utilises-tu ?
Il faut capter le code source de la page en question et la parser avec un parseur ou l'analyser avec une regex, et tu extrais ainsi la portion que tu désires
En Python, ça se fait en moins de deux
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
12 avril 2011 à 20:19
12 avril 2011 à 20:19
D'ailleurs, voilà, c'est fait:
J'ai écrit la RE à partir de ce qu'il y a dans la page en question en ce moment.
Il faudrait connaitre le contenu de la page en cas de bulletin pour adapter la regex à la capture des bulletins tels qu'ils sont présentés.
Si tu as un enregistrement du code source effectué lorsqu'il y avait un bulletin, fais le moi parvenir à heyquem@gmail.com et je modifierai en cnséquence.
Par la suite il sera possibvle d'ajouter une fréquence de consultation si ça t'intéresse, et même l'envoi d'une alerte sur des destinations particulières, mais cette dernière chose je ne sais pas faire pour le moment.
Salut
import re import urllib url = 'http://www.meteo.fr/temps/domtom/La_Reunion/EMD/orages/orages.html' sock = urllib.urlopen(url) ch = sock.read() sock.close() print '\n'.join(repr(line) for line in ch.splitlines(1)) RE = (' BULLETIN DE VIGILANCE ORAGES\n' " </div>\n <div id='references_preview'>\n" ' Bulletin du \d\d/\d\d/20\d\d\n' " <br>\n </div>\n <div id='texte_bulletin'>\n <b>\n" ' <font color="#FFOOOO">\n' " (.+?)\n" ' </font>\n </b>\n </div>\n </body>\n </html>') print print '\n===============================\n' print re.search(RE,ch).group(1)
J'ai écrit la RE à partir de ce qu'il y a dans la page en question en ce moment.
Il faudrait connaitre le contenu de la page en cas de bulletin pour adapter la regex à la capture des bulletins tels qu'ils sont présentés.
Si tu as un enregistrement du code source effectué lorsqu'il y avait un bulletin, fais le moi parvenir à heyquem@gmail.com et je modifierai en cnséquence.
Par la suite il sera possibvle d'ajouter une fréquence de consultation si ça t'intéresse, et même l'envoi d'une alerte sur des destinations particulières, mais cette dernière chose je ne sais pas faire pour le moment.
Salut
lolonaute97
Messages postés
27
Date d'inscription
samedi 26 mars 2011
Statut
Membre
Dernière intervention
14 janvier 2012
13 avril 2011 à 12:00
13 avril 2011 à 12:00
merci. J'utilise php. Quand il y a un bulletin il y a un texte d'une dizaine de lignes qui annonce la durée du bulletin, la date effective, la zone concernée et l'intensité.
Merci en tout cas pour ton aide. Et j'attends ta réponse avec impatience...
Merci en tout cas pour ton aide. Et j'attends ta réponse avec impatience...
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
13 avril 2011 à 15:05
13 avril 2011 à 15:05
Quelle réponse ?
Si tu veux utiliser mon code, tu dois installer Python. Ca prend 10 minutes max.
Si tu veux continuer avec PHP, il faut écrire un programme similaire dans ce langage. PHP permet d'utiliser les regex aussi. Quant à capter un code source sur le web, il doit bien pouvoir le faire.
Certains te conseilleront aussi un parseur. A toi de voir.
En t'adressant à un forum PHP, tu trouveras de l'aide. Si tu restes en PHP, je ne peux pas t'aider plus.
Si tu veux utiliser mon code, tu dois installer Python. Ca prend 10 minutes max.
Si tu veux continuer avec PHP, il faut écrire un programme similaire dans ce langage. PHP permet d'utiliser les regex aussi. Quant à capter un code source sur le web, il doit bien pouvoir le faire.
Certains te conseilleront aussi un parseur. A toi de voir.
En t'adressant à un forum PHP, tu trouveras de l'aide. Si tu restes en PHP, je ne peux pas t'aider plus.
lolonaute97
Messages postés
27
Date d'inscription
samedi 26 mars 2011
Statut
Membre
Dernière intervention
14 janvier 2012
15 avril 2011 à 05:51
15 avril 2011 à 05:51
Salut,
Merci pour le code. par compte petit souci la page "http://www.meteo.fr/temps/domtom/La_Reunion/EMD/orages/orages.html" a été mis à jour et le texte ne s'affiche pas sur mon site.
Comment merci a vous
Merci pour le code. par compte petit souci la page "http://www.meteo.fr/temps/domtom/La_Reunion/EMD/orages/orages.html" a été mis à jour et le texte ne s'affiche pas sur mon site.
Comment merci a vous
ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
38
Modifié par ktm620enduro le 15/04/2011 à 11:15
Modifié par ktm620enduro le 15/04/2011 à 11:15
essaye ceci
Abandonne ce qui te trouble au profit de ce qui apaise ton coeur.
if (preg_match('#(<div id='titre_avis'>.*?)<div id='preview_conseils'>#i',file_get_contents('http://www.meteo.fr/temps/domtom/La_Reunion/EMD/orages/orages.html'),$r)) echo $r[1];
Abandonne ce qui te trouble au profit de ce qui apaise ton coeur.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 15/04/2011 à 14:34
Modifié par heyquem le 15/04/2011 à 14:34
Bonjour,
J'ai fait ce que j'avais dit qu'il faudrait faire dès qu'on aurait le contenu d'un vrai bulletin: adapter la regex pour capturer un bulletin réel.
Le résultat de ce programme est
Dans les résultats , il faudrait changer toutes les séquences HTML du genre
par des caractères accentués.
Mais j'en reste là car je ne sais pas ce que tu veux faire exactement, et que de toutes façons tu utilises PHP. Alors je laisse la main à ktm620enduro.
A titre indicatif, j'ai passé environ 1h pour arriver au code ci-dessus
PS:
l'image a pour adresse:
http://www.meteo.fr/temps/domtom/La_Reunion/EMD/orages/CarteAlerteOrage.png
J'ai fait ce que j'avais dit qu'il faudrait faire dès qu'on aurait le contenu d'un vrai bulletin: adapter la regex pour capturer un bulletin réel.
import re import urllib url = 'http://www.meteo.fr/temps/domtom/La_Reunion/EMD/orages/orages.html' sock = urllib.urlopen(url) ch = sock.read() sock.close() print '\n'.join(repr(line) for line in ch.splitlines(1)) print '\n\n===============================\n\n\n' RE = (' BULLETIN DE VIGILANCE ORAGES\n' " </div>\n <div id='references_preview'>\n" ' (Bulletin nº \d+ du \d\d/\d\d/20\d\d à \d\d h \d\d locales,)<br>\n' ' (valable du \d\d/\d\d/20\d\d\ à \d\d\ heures' ' au \d\d\/\d\d\/20\d\d à \d\d\ heures locales\.)\n' ' </div>\n' " <div id='texte_bulletin'>\n" '(.+?)' '<strong>ZONAGE DES RISQUES:</strong>(.+?)</div>\n' "<div id='carte_et_climato'>" '.+?' 'h2>ZONAGE DU RISQUE</h2>' '(.+?)' "\n </div>\n <div id='preview_conseils'>\n") li = re.search(RE,ch,re.DOTALL).groups() print 'li[0] :\n',li[0] print print 'li[1] :\n',li[1] print print re.sub('</?p>','',li[2]).strip() print print 'li[3] :\n',li[3] print print re.findall('Risque d.+?(?=</p>)',li[3]) print print 'li[4] :\n',li[4] print print re.findall('<br><b>(Zone.+?)(?=<br><b>|\Z)',li[4])
Le résultat de ce programme est
li[0] : Bulletin nº 3 du 15/04/2011 à 05 h 00 locales, li[1] : valable du 15/04/2011 à 05 heures au 15/04/2011 à 17 heures locales. Sur La Réunion, le flux est orienté au Nord-Est, associé à une masse d'air humide et instable. Au cours de la nuit, des nuages se sont développés entre l'île Maurice et notre département. Ils ont abordé les côtes Nord-Est en milieu de nuit. Vers 1 heure, le tonnerre a été entendu. Ces orages peuvent intéresser l'île jusqu'en fin de journée de ce vendredi 15 avril 2011 et occasionner des précipitations, localement fortes. li[3] : <br /><br />Risque d'orages: Zones 1, 2, 3, 4 et 5 </p><p>Risque de fortes pluies: Zones 1, 2 </p> ['Risque d'orages: Zones 1, 2, 3, 4 et 5 ', 'Risque de fortes pluies: Zones 1, 2 '] li[4] : <br><b>Zone 1:</b> Risque d’orages (probabilité 20 à 50%).<br><b>Zone 2:</b> Risque d’orages (probabilité 20 à 50%).<br><b>Zone 3:</b> Risque d’orages (probabilité 20 à 50%).<br><b>Zone 4:</b> Risque d’orages (probabilité 20 à 50%).<br><b>Zone 5:</b> Risque d’orages (probabilité 20 à 50%). ['Zone 1:</b> Risque d’orages (probabilité 20 à 50%).', 'Zone 2:</b> Risque d’orages (probabilité 20 à 50%).', 'Zone 3:</b> Risque d’orages (probabilité 20 à 50%).', 'Zone 4:</b> Risque d’orages (probabilité 20 à 50%).', 'Zone 5:</b> Risque d’orages (probabilité 20 à 50%).']
Dans les résultats , il faudrait changer toutes les séquences HTML du genre
à î é etc....
par des caractères accentués.
Mais j'en reste là car je ne sais pas ce que tu veux faire exactement, et que de toutes façons tu utilises PHP. Alors je laisse la main à ktm620enduro.
A titre indicatif, j'ai passé environ 1h pour arriver au code ci-dessus
PS:
l'image a pour adresse:
http://www.meteo.fr/temps/domtom/La_Reunion/EMD/orages/CarteAlerteOrage.png
ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
38
Modifié par ktm620enduro le 16/04/2011 à 18:46
Modifié par ktm620enduro le 16/04/2011 à 18:46
salut je suis prêt pour te faire ton code, tu as les deux versions du fichier ?
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 16/04/2011 à 18:57
Modifié par heyquem le 16/04/2011 à 18:57
Salut
Problème. Le fichier que j'avais enregistré hier avec le code source du bulletin d'hier ne contient plus ce bulletin: j'ai fait la capture d'un autre code source et j'ai oublié de changer le nom du fichier de destination --> le précédent , avec le bulletin, a été effacé
:(
Problème. Le fichier que j'avais enregistré hier avec le code source du bulletin d'hier ne contient plus ce bulletin: j'ai fait la capture d'un autre code source et j'ai oublié de changer le nom du fichier de destination --> le précédent , avec le bulletin, a été effacé
:(
ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
38
16 avril 2011 à 18:53
16 avril 2011 à 18:53
ca n'est pas le code de : http://www.meteo.fr/temps/domtom/La_Reunion/EMD/orages/orages.html ?
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
16 avril 2011 à 18:59
16 avril 2011 à 18:59
ben non, désolé
cf mon post précédent que j'ai modifié
cf mon post précédent que j'ai modifié
ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
38
16 avril 2011 à 19:00
16 avril 2011 à 19:00
c'est noté, on attend le prochain bulletin lol
13 avril 2011 à 18:53
La RE est aussi longue car elle est prévue pour pouvoir être modifiée afin d'attraper la date en rajoutant simplement deux parenthèses autour de \d\d/\d\d/20\d\d
Le code suivant comporte ainsi findall() au lieu de search() dans la même optique.
ktm620enduro, si je comprends bien, les regex et la fonction file_get_contents() sont disponibles de base dans PHP sans importation particulière ?
14 avril 2011 à 06:17
14 avril 2011 à 08:16
Je m'explique quand il n'y a pas de vigilance je veux afficher une image verte (vert.jpg)
Par contre dès qu'il y a une alerte l'image passe au rouge (rouge.jpg)
Merci a vous!
Modifié par ktm620enduro le 14/04/2011 à 14:28
Modifié par ktm620enduro le 14/04/2011 à 14:23