Session du 12 février 2022 à 18h00
Bases du Langage
Data Science & IA
Librairie Standard & Modules
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Gamification, requests et premiers scrapers
Découvre le système de points sur Docstring, les bases de la librairie requests et une première approche du scraping et des expressions régulières en Python.
00:00:00 :Toi tu as accès à tout ça?Tu peux nous dire comment ça se passe?Oui j'ai accès dans la base de données si vraiment je veux aller chercher l'info.
00:00:14 :Après je ne sais pas quelle est la question derrière tout ça?Parce qu'en fait je suis vachement content parce que je suis dans les 40 premiers.
00:00:23 :Ah ok, oui oui oui, en fait oui oui, effectivement il y a le classement qui lui est...Je crois que par défaut tu n'es pas dedans et tu peux choisir de opt-in comme on dit.
00:00:41 :Et après effectivement tu y as accès une fois que tu dis que tu souhaites apparaître dans le classement.Effectivement là tu es sur la page, je ne sais pas si tu l'as vue, attends je la mets dans le chat.
00:00:53 :Et il y a Romain qui nous rejoint également.Là tu vois tu as le classement général, je ne sais pas si tu l'avais vue cette page?
00:01:02 :Oui oui j'ai vu déjà, en fait c'est vachement motivant, c'est pour ça en fait.C'est cool, oui oui, c'est moi qui aime bien un peu.
00:01:13 :Parce que c'est vraiment le genre de truc, en fait j'ai beaucoup d'idées pour ça.En fait à terme j'aimerais bien, parce que là tu peux gagner des points et tout mais ça ne sert pas à grand chose,à part le côté motivation, mais j'ai toujours l'impression que ça, que en soi ce n'est pas un truc très motivant.
00:01:30 :Alors c'est ça qui est marrant, c'est qu'il y a des gens que ça motive beaucoup et il y en a pas du tout.Et je ne sais pas quel est le pourcentage.
00:01:36 :Mais ce que j'ai prévu en fait c'est que ce système de points,et ça m'intéresse beaucoup le côté un peu gamification, mais c'est très compliquéparce que tu peux coder plein de trucs qui ne vont pas vraiment motiver les gens.
00:01:49 :Mais moi ce que j'aimerais bien c'est en fait permettre à des gens qui ne sont pas abonnés au sitede débloquer des trucs avec ces points et les points de pouvoir les gagner.
00:01:58 :On peut les gagner aussi en aidant sur le serveur public.Donc d'avoir une espèce d'émulation comme ça, par exemple pour les sous-titres,je suis en train de sous-titrer beaucoup de vidéos sur le site,donc que tu puisses par exemple proposer un sous-titrage sur des vidéoset que si c'est bien fait, tu gagnes des points avec ça
00:02:16 :et puis qu'avec ces points après tu puisses débloquer des trucs.Donc comme ça pour des gens, je me dis des gens qui, des jeunes ou des gens qui n'ont pas les moyensde suivre les formations, qu'ils puissent débloquer des trucs qui les intéressent comme ça.
00:02:28 :Ouais c'est bien, c'est plutôt cool.Deuxième chose, quand on met des notes dans les vidéos, admettons moi je prends des notes sur une vidéo,est-ce que toi tu y as accès ou pas? En fait si je te demande ça, c'est au cas où,
00:02:45 :et encore c'est super rare, mais au cas où il y a une coquille ou un truc comme ça,est-ce que toi tu as accès aux notes dans les vidéos ou pas?
00:02:53 :C'est pareil, c'est dans la base de données, après c'est ça, moi j'ai pas,donc là encore oui j'y ai accès si par exemple tu les as, après il n'y a pas de raison que tu les perdes,enfin si tu les perds dans le sens où je veux dire si tu les supprimes,
00:03:09 :c'est que tu les supprimes dans la base de données aussi, donc là plus personne n'y a accès.Enfin après j'ai des backups par contre, j'ai des backups de la base de données.
00:03:16 :Donc si par exemple la question c'est est-ce que parce que tu as supprimé une note,tu veux la revoir, là effectivement je peux retourner dans les backups pour voir si je peux la retrouver.
00:03:24 :Non non moi c'était dans le sens où quand il y a, comme ça s'est passé cette semaine,où j'avais un doute un peu sur les sources, en fait si tu veux le déroulé de la vidéo,qui n'a pas marché, qui ne marchait pas comme les sources,et encore c'est la première fois que je vois ça sur la tonne de vidéos que j'ai visionnées,
00:03:43 :c'est la première fois où j'ai eu un petit peu de, pas un petit peu de mal,mais après c'était une erreur qui pouvait se corriger de toute façon,si on avait bien suivi la vidéo d'avant. Donc en soi c'est pas grave.
00:03:54 :Ouais mais ça j'ai prévu en fait, ça fait deux mois que je dois le mettre en place,j'ai prévu un système en fait spécial de, comment on appelle ça, de signalement en fait,parce qu'effectivement pour l'instant il y a plein de gens qui me remontent des petits trucs,des erreurs de typos, des erreurs comme ça, une source qui est mauvaise ou un truc comme ça,
00:04:13 :et pour l'instant ça se fait, les gens me le disent comme ça via Discord ou autre,donc là j'ai prévu de faire un truc, et là encore qui sera un petit peu gamifié,donc pour encourager les gens à signaler les problèmes et que ce soit mieux,que tu puisses dire c'est un type de problème, c'est justement une typo,
00:04:28 :c'est une vidéo qui est manquante, c'est un truc comme ça, tu vois.Donc ça oui, le bouton est dans le code et ça fait quatre fois que je le mets,que je l'enlève parce qu'il faut que je fasse le système derrière.
00:04:38 :Ça pourrait être intéressant, on pourrait voir comment on le fait sur Django,un moment si ça vous intéresse, ça pourrait être un truc marrant à faire.
00:04:45 :Ça peut.Et c'est tout pour mes questions pour l'instant, et maintenant je vais laisser la part de vous autres.Pas de soucis, je vais juste faire un petit Everyone Live en cours,il y a pas mal de monde du coup là ce soir, c'est bien.
00:04:59 :Il y a Romain, il y a Jean-Bernard aussi qui nous a rejoints, et Guillaume aussi.Bonsoir à tous, je vais juste peut-être fermer le... Voilà, histoire de pas vous éblouir.
00:05:17 :Donc, cette adresse, ouais c'est ça, ouais, donc ça c'est bon.Et je vais essayer, parce que la dernière fois, alors c'est quoi qu'ils m'ont dit?
00:05:30 :L'enregistrement de la dernière fois il a un peu foiré,parce qu'ils m'ont dit que c'était un problème avec Chrome, que j'avais partagé tout l'écran.Donc là je vais essayer de faire gaffe, je vais partager juste...
00:05:44 :Ouais, je vais partager ça.Alors il veut pas partager Chrome, bon.On va essayer de partager autre chose.Donc ouais, il y a plusieurs choses qu'on va voir ce soir,il y avait la question de Ricardo sur les posts et les get, ça non plus il veut pas.
00:06:12 :Les posts et les get sur Django, il y avait la question sur les rejects,et il y avait la question de William, donc il pourra pas être là finalement,mais il y avait pas mal de questions en fait, de façon assez générale,sur le scrapping, c'est ça.
00:06:35 :Le scrapping, yes, merci JP.Scrapping, autant au niveau de la possibilité que de l'égalité aussi,puisque c'est vrai que c'est un peu la question qu'on met sous le tapis des fois,mais qui est quand même intéressante à se poser.
00:06:56 :Je vais juste essayer de régler ce problème de partage d'écran.Et est-ce qu'il y avait d'autres questions sinon à part ça?Donc Django, posts et get, rejects et scrapping.
00:07:13 :Est-ce que ça vous va?Et oui, du coup si vous parlez pas, n'oubliez pas de couper vos micros,comme ça il y aura le moins de bruit de fond possible.
00:07:35 :Bon, il veut pas partager, manage.Ok, je vais essayer de partager tout mon écran, mais j'ai peur que la qualité soit pas encore géniale.Ok, bon il veut même pas partager l'écran complet.
00:07:55 :Le navigateur, ok, je pense que c'est un problème de permission,parce que j'ai mis à jour sur la dernière version de macOS, désolé pour ça.
00:08:06 :Des problèmes techniques, security.En attendant, n'hésitez pas si vous avez des questions.Moi j'ai une question pour Ricardo en fait, je sais pas s'il m'entend.
00:08:25 :Je t'entends bien, je t'entends bien.T'as parlé du module request, qu'on peut pas passer à côté si tu veux, c'est un superbe module.Si c'est pas trop en discret, c'est pour interagir avec quoi?
00:08:41 :Justement je voulais le montrer ce soir, parce que clairement j'en suis fier.En fait après avoir suivi l'information sur le blog que t'as fait Thibaut, j'ai voulu approfondir.
00:08:55 :Tu peux partager ton écran si tu veux.Le temps que je trouve comment partager le mien, normalement tu devrais pouvoir partager le tien.Ou alors c'est vraiment un problème.
00:09:07 :Je sais pas si vous le voyez.Et du coup j'ai approfondi, j'ai créé ça.Donc voilà, ça c'est le blog que j'ai fait, ça fait une semaine et demie que je travaille dessus.
00:09:27 :Et j'ai beaucoup regardé la documentation Django, et j'ai vu que en ce qui concerne les formulaires,fallait beaucoup utiliser request.get, je le faisais mais sans comprendre en fait.
00:09:45 :Ouais, en fait il y a deux choses à voir là dedans.Il y a le module request, qui est un module à part entière qui permet de faire des requêtes.
00:09:56 :Et là effectivement tu peux faire des requêtes get, des requêtes post, tout type de requêtes put, delete.Et après il y a à l'intérieur, peu importe que ce soit le module ou dans Django,c'est toujours le même principe entre les requêtes get, post, etc.
00:10:14 :C'est juste que dans un cas de figure, c'est toi avec la librairie request qui va aller chercher une page.Et donc là c'est complètement déconnecté de Django si tu veux.
00:10:23 :Et après dans Django, quand tu fais un formulaire, si tu veux envoyer des informations avec le formulaire,tu as deux façons d'envoyer des informations, soit dans l'URL, donc là c'est avec le get,et en fait là tu peux avoir les informations dans l'URL,donc tu as des fois un point d'interrogation avec une clé et une valeur.
00:10:46 :Oui, qui suit juste après.Et donc ça c'est avec une requête get, et le problème de ça c'est que du coup c'est visible directement dans l'URL.
00:10:55 :Alors qu'avec post, les données vont être, donc là c'est dans le formulaire,et je vais vous montrer si j'arrive à partager mon écran.C'est dans ton HTML, tu vas spécifier quel type de requête tu veux faire.
00:11:10 :Et après du côté de Django, tu vas pouvoir faire différentes actions en fonction de si c'est une requête get ou post,pour donc traiter les données du formulaire.
00:11:20 :C'est pas forcément un problème que les éléments de la recherche soient visibles dans l'adresse,c'est parfois même une feature.Oui, ça dépend.Je dis que c'est un problème par exemple quand tu as des formulaires pour t'enregistrer ou des trucs comme ça,ou tu as des informations sensibles,si tu as le mot de passe qui est en clair dans l'URL, là c'est pas très bien.
00:11:46 :Ok, ok.Je vais essayer de mettre à jour mon Chrome.Alors je sais pas si ça...Je vais quitter la salle, le mettre à jour et revenir.
00:12:00 :Ouais, et c'est effectivement sur le scrapping, quand tu es dans une entreprise, dans ce cas-là,à revérifier, mais j'imagine qu'au niveau de la responsabilité par exemple,tu n'aurais pas les...
00:12:21 :C'est pas comme si tu es seul chez toi et que tu le fais pour un besoin personnel.Si c'est quelqu'un qui te demande de le faire, c'est différent.
00:12:32 :Après on est couvert, on a reçu l'ordre, c'est le travail, c'est le boulot.Mais le scrapping pour ça est ultra pratique.Et on le fait.
00:12:44 :Oui, après c'est sûr.C'est pour ça qu'on disait que c'est le secret de Polyfinel.De nouveau, tu exploites pas les données que tu as scrappées.
00:12:54 :Tu les analyses, comme si t'avais...T'es moins cher d'avoir Request qui va chercher les donnéesque d'avoir l'administrice qui est devant en chrome et qui le fait à la main.
00:13:05 :Donc ça c'est l'idée.Par contre, vous allez pas exploiter sur votre site les données ou faire une publication avec.Et c'est là où ça devient délicat.
00:13:17 :Et il y a aussi, comme tu disais, sur le côté pas vu pas pris.C'est un peu ça, je voulais parler aussi avec les bibliothèques qui sont disponibles.
00:13:29 :Donc il y a Request qui permet de faire des requêtes en tant que telle.Après pour le traitement des données, souvent on utilise BeautyTreeSoupqui permet de récupérer le HTML et de le parcourir plus facilement.
00:13:41 :Il y a Scrappy aussi qui permet de lui faire plus le côté automatisation,de créer ce qu'on appelle des crawlers,qui vont aller récupérer les informations à intervalles réguliers ou des trucs comme ça.
00:13:56 :Et avec des recettes un peu.Il y a Selenium aussi.Selenium, c'est là où je voulais en venir.Selenium, il y a un côté un peu...
00:14:06 :Ça peut être pratique quand vous avez du JavaScript ou des trucs comme çaqui ne sont pas forcément existants tout de suite.Et il y a un côté un peu sur Selenium.
00:14:15 :Par exemple, vous pouvez avoir la fenêtre qui s'ouvreet puis aller rentrer les informations dans un champet puis appuyer sur Entrée, etc.Et donc là, vous avez un Scrapping qui est presque comme si c'était vous derrière l'ordi qui le faisait.
00:14:27 :Et vous pouvez même mettre des timers pour direattend un nombre aléatoire de secondes entre le premier et le deuxième champ.Et donc là aussi, au niveau après...
00:14:41 :Je ne sais pas du tout si jamais il y avait une enquête ou un truc comme ça,comment ça pourrait être prouvé directement.Mais c'est sûr que si vous avez un script qui fait 10 000 requêtes à la seconde,ce n'est pas un truc qui est vraiment faisable par un humain.
00:14:55 :Par contre, aller rentrer les informations à la main dans un formulaire,c'est un truc qui ressemble déjà plus à un humain dans la façon de procéder.
00:15:02 :Donc c'est moins visible, en tout cas au niveau du serveur.Quelqu'un qui a un serveur, moi si demain je vois qu'il y a 10 000 requêtes qui arrivent d'un coup,je sais que ce n'est pas un gars qui a appuyé 10 000 fois dans la même secondepour ouvrir 10 000 onglets Chrome.
00:15:17 :Ce n'est pas possible.Donc là, on a une preuve que c'est un script qui a fait ça.Oui, il y avait des réactions?Non?Donc oui, il y a des lois, c'est encadré, c'est tout ça.
00:15:35 :Après, je reviens sur l'exemple du RGPD que je disais.Le RGPD, il y a des sites, vous allez sur Allociné ou je ne sais pas quoi,là où ils veulent vous faire payer 2 euros pour ne pas prendre vos cookies,ce qui est complètement illégal.
00:15:48 :Et puis, ils continuent de faire ça, donc c'est souvent ça.Ce n'est pas illégal?Je crois que c'est le truc de demander...En fait, c'est illégal si tu ne laisses pas le choix, en gros.
00:16:03 :C'est qu'en gros, ils te disent, si vous voulez qu'on ne vous affiche pas de pubet qu'on ne vous prenne pas vos données, il faut payer 2 euros.
00:16:11 :Sinon, on t'affiche la pub et on ne prend pas tes données.Oui, mais tu as toujours la liberté de ne pas visiter le site ou pas.
00:16:19 :C'est une relation commerciale.C'est comme si tu vas au cinéma et puis tu dis on vous prend 15 euros,c'est en ou à Casper en Suisse.
00:16:28 :Pour rentrer au cinéma, ce n'est pas légal.Moi, j'ai le droit de regarder le film.C'est une porte ouverte.Oui, mais c'est dans la façon dont c'est tourné.
00:16:40 :Il faudrait revoir parce que peut-être qu'ils sont justement dans la zone grisequi fait qu'ils ont le droit de le faire et qu'ils peuvent continuer à le faire.
00:16:46 :Il me semble que quand ils ont mis en place des nouveaux trucs RGPD récemment,il y avait plein de gens qui disaient, ça c'est...Ou alors c'est peut-être sur le côté juste moral et éthique.
00:16:56 :Peut-être que légalement, ils ont le droit, mais que c'est juste pas très beau.Ce n'est pas apprécié par les idéalistes du web.Oui, oui, oui.
00:17:08 :C'est sûr.Après, c'est la façon dont c'est tourné.Soit tu dis, il y a un abonnement pour accéder à notre site,comme le font les journaux par exemple.
00:17:16 :Là, ça peut s'entendre qu'il y a du travail qui est fait derrière et qu'il faut payer.Mais quand c'est en mode, soit on te prend tes données et c'est gratuit,soit si tu veux pas qu'on te choppe tes données, c'est payant.
00:17:26 :C'est là où ça ne devrait pas être de base.Tu devrais pouvoir accéder à un service sans qu'on te pique tes données.Je pense que c'était plus ça qui fait que les gens tiltent un peu.
00:17:37 :Donc c'est fait pour le Post-Get Scrapping.Il y avait les Regex aussi.Je ne sais pas à quel point vous avez déjà vu un peu les formations qu'il y avait sur les Regex.
00:17:49 :Ou non.Est-ce qu'il y a déjà des gens qui se sont amusés à ça?Alors moi personnellement, les Regex, je m'en servais en batch.Je m'en servais dans le shell.
00:18:04 :C'est l'univers.Je ne sais pas si on a compris.Oui, ça fait peur, mais après c'est pas...Moi, comme je disais sur le Discord, je trouve même ça marrant.
00:18:13 :Et après ce qui est bien, c'est que généralement, à moins que je me trompe,mais il me semble que les règles sont les mêmes peu importe le langage.
00:18:22 :C'est un langage en soi et les règles ne changent pas.Et après c'est juste dans la façon en Python ou en JavaScript,vous n'allez pas utiliser forcément les mêmes bibliothèques par langage,ou les mêmes fonctions, etc.
00:18:35 :Donc avec Python, il y a le module Reux.Je ne sais jamais comment le prononcer.Je vais vous partager...Qu'est-ce qu'on va partager?On va ouvrir un...
00:18:47 :Je vais juste partager ça.Voilà, donc les regex.Donc le module, vous faites un port Reux.Et déjà, regex, en plus, c'est un raccourci pour Regular Expression.
00:19:08 :Donc expression régulière.Rationnelle.Rationnelle? Ah ouais?Ah oui, je dis régulière.Expression rationnelle.Les gens disent expression rationnelle, expression régulière,comme ils disent librairie, par exemple.
00:19:24 :Oui, oui, oui.C'est faux, mais c'est tellement répandu.C'est répandu, ouais.Mais le mot exact, c'est rationnel, oui.C'est vrai que je me souviens de l'avoir déjà vu, effectivement.
00:19:34 :C'est vrai que quand tu vois expression rationnelle,t'as l'impression que c'est un truc...Ça me fait penser à un truc de mathématiques.Mais ça vient des maths, en fait.
00:19:43 :La théorie des expressions rationnelles vient des maths.Et c'est pour ça que rationnelle est le terme correct.Mais je ne connais pas un site qui n'utilise pas régulière.
00:19:54 :Je crois même que la traduction de la doc de Python l'utilise régulière.Ouais.C'est con parce que je me fie souvent sur la doc pour les traductions,en me disant qu'ils ont la vérité vraie.
00:20:05 :Mais après, on dit souvent regex ou regext,mais ça serait plus logique de dire regex,vu que c'est des régulars.Bon, après, gex.Bon, on s'égare.
00:20:17 :Donc le module re, et après, par exemple, sur le re,vous allez avoir re.match,il y a re.group,il y a re.sub, je crois, pour enlever...
00:20:29 :Enfin, il y a plein de petites fonctions comme çaqui vous permettent de faire différentes opérations avec ce module.Donc ça, c'est la partie qui est finalement, j'allais dire, simple.
00:20:40 :Enfin, utiliser le module Python, après, c'est pas très compliqué.Par contre, là, je vais revenir sur mon Chrome.Donc, il y a un site qui est excellent,et puis il y a la formation qui doit être...
00:20:56 :Si je tape juste regex...Hop, hop, hop, hop, hop.Hop, voilà, les expressions régulières, ou rationnelles.Donc, voilà, il y a une petite formation à ce sujet,après, c'est beaucoup de pratique,et pour la pratique, et quand vous avez des cas concrets,je vous conseille ce site, il y en a plein qui existent.
00:21:20 :Celui-là, c'est souvent celui qui revient en premier,et moi, je le trouve bien parce que,surtout, il y a le petit quick reference ici,parce que les expressions régulières, en fait, le problème, c'est souvent...
00:21:30 :Même une fois que vous avez compris le principe,à moins d'en faire tous les jours, souvent on oublie.On oublie, tiens, pour cibler deux caractères précisément,est-ce que c'était le point d'interrogation, l'astérisque, le plus...
00:21:41 :Donc là, ce qui est bien, c'est qu'il y a le petit quick reference,que je trouve très bien fait, qu'on peut peut-être...Il y a explanation aussi, mais je crois que des fois,c'est plus ou moins clair, parce que, justement,il fait une analyse générale de votre regex.
00:21:57 :Mais là, donc voilà, vous avez un peu tous les tokensque vous pouvez utiliser.Vous voyez qu'il y a pas mal de choses,et il y a pas mal de trucs qui font un peu peur,des trucs comme ça, des accolades,parce qu'en fait, c'est une syntaxe qui va vous permettre...
00:22:10 :J'aurais peut-être dû commencer par ça,parce que c'est pas forcément clair.Les regex, en fait, ça va permettre de faire matcher...Alors, matcher des patterns, de faire correspondredes patterns, si quelqu'un a la traduction française.
00:22:26 :Des motifs.Des motifs, voilà, merci.Donc, en fait, c'est très utilisé, par exemple,pour vérifier des formats, par exemple,une adresse e-mail, un numéro de téléphone, une adresse.
00:22:39 :Donc, par exemple, pour le numéro de téléphone,en fonction des pays, on va avoir des regex différentes.En France, on va regarder, par exemple,est-ce qu'on a 10 numéros à la suite.
00:22:48 :Et là où c'est très fort, c'est qu'on peut fairebeaucoup de...On va pouvoir matcher beaucoup de motifsqui sont pas exactement pareils.Par exemple, on pourrait faire avec une seule expression régulièrequi va trouver tous les types de numéros de téléphone français.
00:23:08 :Donc, il pourrait trouver les numéros qui commencent parplus 33 6 machin,ceux qui sont en format 06-quelque chose,06 espace quelque chose,parce qu'à chaque fois, on va avoir des logiques,par exemple, on va avoir des, un peu comme en Python,des opérateurs logiques en mode et, ou, etc.
00:23:28 :Donc ça, ça doit être dans les...dans les... je sais pas.Je sais pas où ils les ont mis.Go construct.Il les met pas dans les tokens.
00:23:45 :Donc vous allez par exemple avoir le pipequi va vous permettre de dire si t'as ça ou ça.Voilà, alternate, c'est ça.Match either A or B.
00:23:55 :Donc, soit vous avez un truc, soit vous en avez un autreet comme ça, vous allez pouvoir matcher différentes choses.Donc, soit j'ai un espace, soit j'ai un tiret,soit j'ai un point, ça peut matcher tout ça.
00:24:06 :Et vous voyez qu'ici, il y a différentes choses.Donc, je vais vous montrer un petit exemplepour pas parler dans le vide là encore.Donc, imaginez, là en fait, vous allez pouvoir tapervotre expression régulière icisur vos chaînes de caractère de test ici.
00:24:19 :Donc là, on pourrait faire 06.Je vais mettre des numéros au hasard.Ça, on pourrait se dire c'est comme ça.On va juste faire ces deux là pour l'instant.
00:24:34 :Donc là, vous voyez qu'on a deux numéros de téléphonequi se ressemblent.Et il y en a un qui a des tirets, l'autre qui a des espaces.
00:24:41 :Et c'est pour ça que je vous dis que c'est un peu comme un jeu.Je trouve ça assez marrant de se direcomment est-ce qu'on peut faire matcher...
00:24:48 :Qu'est-ce qu'on cherche déjà?Donc là, on va chercher 5 séquences de 2 chiffres.Il faut savoir là aussi que, comme tout le temps,il n'y a pas une seule façon de le faire.
00:24:57 :Vous pouvez avoir 2 ou 3 regexqui vont matcher les mêmes motifs.Donc là, on va chercher des nombres.Donc là, vous voyez que vous pouvez chercher différentes choses.
00:25:10 :Par exemple, on a des tokens,des jetons, des motifs qu'on peut utiliser.On peut dire spécifiquement,on pourrait mettre entre crochets ici,dire on va cibler tous les nombres de 0 à 9.
00:25:26 :Et là, vous voyez ce qui est bien,c'est qu'à chaque fois, il vous surligne,il vous dit il y a 24 matchs.Donc là, il a trouvé tout ça qui correspondait à ce que j'ai mis ici.
00:25:34 :Donc des nombres entre 0 et 9.Si je mets par contre entre 5 et 9,vous voyez que là, on a tous les nombres en dessous de 5,enfin en dessous de 6 parce que je crois que c'est exclusif.
00:25:44 :Ou parce que je n'ai pas de 5, tout simplement.Je vais essayer de rajouter un pour voir.Donc si je mets 5,non c'est ça, le 5 est inclusif.
00:25:52 :Donc c'est inclus dedans.Donc là, j'ai tous les nombres de 5 à 9.Donc ça, ça pourrait être une expression régulière.On pourrait se dire, dans ce numéro de téléphone,je vais récupérer tous les nombres qui sont entre 5 et 9.
00:26:03 :Et donc généralement, comme je vous dis,il y a des trucs assez classiques.Par exemple, les chaînes de caractères,les nombres, les espaces,des trucs comme ça,c'est des choses qu'on trouve assez souvent.
00:26:13 :Donc pour ça, ils ont fait des délimiteurs.Donc vous voyez, par exemple,si vous voulez chercher tous les types de nombres,vous pouvez utiliser le slash d.
00:26:20 :Et ça va matcher tous les nombres.Si vous voulez matcher tout ce qui n'est pas un nombre,vous faites slash d majuscule,et là c'est l'inverse.
00:26:28 :Ça va matcher tous les caractères qui ne sont pas des nombres.Donc là, vous commencez à voir la puissance du truc.On pourrait se dire, j'ai un texte,et je veux récupérer dans le texte,j'ai des caractères parasites,des pourcentages, des n'importe quoi,et vous n'avez pas envie de faire un if pourcentage,
00:26:46 :tu l'enlèves, if machin, tu l'enlèves,vous voulez un truc générique,vous pouvez utiliser ça et lui dire,récupère-moi dans mon texte tout ce qui n'est pas un nombre.
00:26:53 :Et comme ça, il va pouvoir vous le récupérer.Et c'est là, après, qu'une fois que vous avez votre expression régulière,vous allez pouvoir utiliser les fonctions de Pythonpour faire des opérations.
00:27:02 :Vous pourrez dire, par exemple, avec match,fais juste correspondre mon expression régulièreà une chaîne de caractères,et dis-moi où est-ce qu'il y a des matchs.
00:27:12 :Donc là, c'est un peu comme ce qu'on fait iciavec Regex 101 qui nous dit, il y a 22 matchs,donc là, il nous dirait, voilà ce que j'ai trouvéqui match ta Regex.
00:27:20 :On pourrait utiliser sub,qui lui est l'équivalent du replace,ou du strip peut-être plus, en Python,qui va en fait enlever ce qui est matché.
00:27:31 :Donc tous les matchs qu'il trouve,il va en fait les supprimer,et je crois qu'on peut les remplacer aussi,je ne sais plus, je pense qu'on doit pouvoir passeren deuxième argument une chaîne de caractèresà mettre à la place.
00:27:42 :Donc là, après, il y a le côté,vous avez votre expression régulière,et puis après, à l'intérieur de Python,avec le module Re, vous pouvez fairece que vous voulez avec.
00:27:50 :Et donc là, je vais revenir, par exemple,sur mon slash d, on va dire que,au début, par contre, on veut 0.6 précisément.Donc au début, je vais mettre 0.6.
00:28:04 :Je mets ça, et là, vous voyez que ça matchprécisément 0.6.Et ça, on va dire qu'on ne le veut qu'une fois,et c'est là qu'on a des modifieurs.
00:28:13 :Donc par exemple, ici, vous allez avoirles quantifiers, c'est ça.Donc vous pouvez dire, j'en veux 0 ou 1,donc 0 ou 1 de ça.
00:28:23 :Donc moi, j'en veux au moins 1,j'en veux exactement 1, en fait.Vous voyez, vous pouvez avoir 0 ou plus,1 ou plus, exactement 3,3 ou plus, entre 3 et 6,donc vous voyez qu'il y a plein de petits trucscomme ça qui vous permettent de cibler.
00:28:38 :Moi, j'en veux exactement 1,donc là, je vais utiliser les accolades.Je vais dire que j'en veux spécifiquement 1.Donc là, ça éviterait, par exemple,si on a un autre 0.6 devant,
00:28:49 :il me le trouve aussi.Match 2, ah oui, parce qu'il faudraitque je mette au début de la chaîne, je crois,parce qu'après, il y a des modifieurspour les débuts et fins de chaîne.
00:29:04 :Hop, hop, hop.Il me semble que c'est ça, voilà.Start of string et end of string.Voilà, donc là, vous voyez qu'il ne matcheque celui qui est au tout débutet pas ceux après.
00:29:16 :Et après, comme ça, vous pouvez continuer.Dire qu'après, vous voulez,on veut un tiret ou un espace.Et donc là, on va avoir le alternateet les espaces, c'est, là,any whitespace character,c'est les slash s.
00:29:33 :Donc là, vous voyez, quand je mets slash s,le premier, il est plus reconnu,le deuxième, il l'est.Donc moi, je vais vouloir faire,et là, on peut faire des groupes,après, on peut mettre des parenthèseset on peut dire qu'on veut un espaceou un tiret.
00:29:46 :Et là, vous voyez qu'il trouve les deux.Après, on peut dire,pour les numéros qui suivent,je veux cinq séquences,et là, on va mettre, on pourrait mettreune séquence de deux nombreset un tiret ou un espace.
00:29:59 :Donc là, on pourrait dire,on va mettre slash d et on en veut précisément deux.Je vais refaire un groupe, par exemple.On en veut spécifiquement deuxet ensuite, on veut,donc, ce qu'on avait là,un espace ou un tiret.
00:30:17 :Et ça, on le veut cinq fois.Donc on remet un truc,et là, j'ai dû me faire une erreuret c'est là que vous voyez que c'est compliquéparce que ça devient très vite compliquéà voir ce qu'on fait.
00:30:32 :Je ne sais pas si quelqu'un voitoù je me suis planté.Slash d, j'en veux deux,deux nombres,un petit jet, ouais.Vous m'entendez toujours ou oui,je ne parle pas tout seul?
00:30:45 :Non, c'est bon.Slash s ou.Alors, c'est peut-être parce qu'il fautque je les mette entre parenthèses,justement, parce que là,je ne sais jamais quand on met un ou,s'il faut du coup, comme en maths,les entourer pour pas que ça continue.
00:31:06 :Et puis, il y a aussi des fois,en fait, il faut, comme en Python,des fois, échapper des caractèresparce que c'est un peu le risque.
00:31:12 :C'est que si je mets un tiret,le tiret, ça se peut que ce soitun truc qui est utilisé comme token.Donc des fois, ça arrive que vous ayez besoin d'échapper.
00:31:21 :Et alors, je ne sais plus si c'est avec lui ou lui.Je pense que le slave n'existe pas, non?Le quoi? Qui n'existe pas?Ah, c'est ça, oui.
00:31:31 :Hum...Hum...Ou alors, il faut les entourer, je ne sais plus.Il faut les entourer avec les crochets.Je ne sais plus.Vous voyez, ça fait longtemps que je n'en ai pas fait.
00:31:44 :Mais bon, vous voyez, l'idée, c'est qu'à chaque fois,on va faire matcher soit des caractères très précis,soit des motifs comme un espace, un nombre,un... je crois qu'il y a des trucs aussi pour les...
00:31:58 :Je ne sais plus, les trucs spéciaux.Et puis après, vous avez les modifieurs.Donc pour dire, je veux que tu les matches 0 ou 1,1 ou plus, 0 ou à l'infini,ou 5 précisément.
00:32:12 :Et puis après, vous pouvez faire des petits groupes comme ça,et puis répéter, dire je veux 5 fois ce même motif.Par exemple, pour une adresse email,ce qu'on va vérifier, c'est est-ce qu'il y a une suite de caractères définie.
00:32:23 :Et là, on va utiliser les règles qu'on a dans les emails,parce que dans les emails, on peut mettre, par exemple,je crois presque tout sauf un ou deux caractères spécifiques.
00:32:33 :Donc on va dire, vérifie qu'il y a une suite de caractèresqui va de 1 à peut-être, je ne sais pas,on pourrait peut-être mettre une limite quand même, de 1 à 50.
00:32:42 :Ensuite, vérifie qu'il y a un arrobase et un seul,parce qu'une adresse mail ne peut pas avoir plus qu'un arrobase.Ensuite, vérifie que pareil, il y a une autre suite de lettres,que il y a un point et qu'il y a une autre suite de lettrespour le.com,.fr,.org, etc.
00:32:58 :Donc voilà, vous avez l'idée,et puis après si vous voulez aller plus dans le détail,je vous invite à aller voir les formations sur le sujet,et si vous avez des questions, parce que c'est le genre de trucoù vous voyez là, je m'en mêle les pinceaux un petit peu en live,
00:33:11 :et puis il y a probablement des petits trucs que j'ai oubliés,qu'il fallait faire.Après, ce genre de truc là, il va pouvoir vous générer du codePython, n'importe quoi, etc.
00:33:21 :Et je crois que vous pouvez, voilà, code generator.Moi, je ne m'en suis jamais trop servi,mais vous voyez là, il vous montre plein de façons de faireavec justement le match.
00:33:32 :Alors lui, il importe R.E.Voilà.Ok, non, après il fait un...Oula, comment il fait ça lui?Ok, fin, il t'a raté, il utilise un autre truc.
00:33:42 :Mais oui, alors il vous génère du code,moi je ne l'ai jamais trop utilisé.Normalement, je prends ce que j'ai fait ici,puis après je le mets directement dans Python,et après j'utilise les fonctions que je veux,qu'on a vu, les matchs, les subs, les trucs comme ça.
00:33:59 :Est-ce que ça va?Ou vous avez le cerveau qui a explosé?4 au lieu de 5, oui c'est peut-être...Non, je crois que c'est 5,parce que oui, il y en a 5.
00:34:19 :Est-ce qu'il y avait des questions?Non, personnellement non.Ça va?Après, c'est vraiment le truc, au début ça fait peur et tout,puis après moi je trouve que c'est vraiment marrantd'essayer de voir, de trouver les patentes qui marchent,et on se retrouve avec un truc charabia comme ça.
00:34:44 :C'est vraiment le genre de truc que quand vous ne connaissez pas,vous vous dites, ça a l'air méga compliqué,et en fait ça ne l'est pas vraiment.
00:34:50 :C'est juste que c'est un langage tellement spécifiqueque c'est sûr que ça fait peur au début.Et qu'est-ce qu'il y a?Je réfléchis s'il y a d'autres trucs à dire là-dessus.
00:35:05 :Non, ça fait pas mal le tour.Tu peux jeter une question?Ouais, ouais, bien sûr.Une fois qu'on a l'expression, on peut appeler n'importe quelle méthode?
00:35:23 :Oui, normalement.Ou pas forcément.De quoi? Excuse.Est-ce qu'on peut essayer le match avec la même expression,mais aussi search par exemple avec la même fonction?
00:35:40 :Oui, normalement, ta regex après, que tu utilises match, sub,peu importe ce que tu utilises, la regex ne va pas changer.Après, tu peux faire une...
00:35:55 :Après c'est juste que le résultat qui va te retourner,du coup la fonction ne sera pas la même.Puisque sub, je crois, ça va te retourner une chaîne de caractèrecomme un replace.
00:36:06 :Le match, ça va te retourner, si je ne me trompe pas,des objets de la bibliothèque REUX,sur lesquels tu peux...Je ne sais plus s'il y a match ou groupe.
00:36:19 :Je ne sais plus si c'est le match qui te retourne des groupesou s'il y a une fonction groupe spécifique.Parce qu'après tu peux faire des groupes là-dedans,justement avec les parenthèses.
00:36:27 :Donc match te retourne un objet,et puis dans cet objet, tu as la possibilité de récupérer les groupes.Les groupes, c'est ça.Donc tu vois, ça ne va pas te retourner tout le temps la même chose,mais la regex de base, normalement, il n'y a pas de raisonque le code de la regex change.
00:36:41 :Et si c'est aussi, petite précision qui est quand même intéressante à savoir,importante, c'est que si tu utilises...Si tu as une regex que tu utilises très souvent,tu peux, alors je ne sais plus, je cherche en parlant,Thierry tu vas pouvoir m'aider.
00:36:58 :Tu peux la compiler.Oui, compile, c'est ça.Re.compile, ça va transformer ça dans un objet binaire un petit peu plus efficace.Parce qu'en fait, ce que tu fais en re.search,
00:37:12 :tu mets une chaîne de caractères qui représente un motif,à chaque fois il va faire ça, à chaque fois il va compiler,puis faire ce qu'on appelle un automate à état fini.
00:37:22 :Et donc ce temps de compilation, il va le faire à chaque fois,qu'on appelle re.search, re.sub, etc.Tandis que si on fait en re.compile, ça va le compiler une fois,
00:37:37 :et puis après, les différentes méthodes de cet objet compilévont pouvoir être utilisées pour faire des recherchesou pour faire des substitutions.Ce sera juste plus efficace si je fais ça, par exemple,si je le fais un million de fois, je vais le compiler avant,et puis après dans la boucle, je vais plutôt utiliser la façon compilée.
00:37:57 :Tu vois là, ils ne le mettent même pas ici.Mais oui, effectivement, c'est pour ça que des fois,je sais que ça peut perturber un peu,parce que des fois tu vas chercher sur Stack Overflow,et le premier truc que tu vois c'est re.compile,
00:38:09 :et tu te dis, ouah, c'est quoi ce truc, pourquoi il y a besoin de compiler,et finalement tu l'enlèves et tu as l'impression que ça ne change rien.
00:38:17 :Donc voilà, c'est juste pour des questions de performance.Tu n'es pas obligé de le faire, mais si tu sais que tu vas,que c'est ça que tu vas l'utiliser beaucoup,tu as un meilleur temps de le faire.
00:38:28 :Si on ne fait qu'une seule recherche, par exemple,ça ne sert à rien, parce que de toute manière,la fonction re.search, par exemple, va le compiler.
00:38:39 :Mais c'est toujours, si je fais des répétitionset j'utilise une recherche vraiment beaucoup de fois,ça fait une différence.Oui, exactement, c'est ça.Donc oui, il ne faut pas le faire, si tu as une ligne de regex, etc.,
00:38:55 :qui existe une fois, ce n'est pas utile.Merci pour les questions.Salut Romain, je crois que...Ouais, non, si, il est encore là.Non, c'est Ricardo, je vois juste un R.
00:39:11 :Romain, Ricardo, vous avez la même photo de profil ici.Est-ce qu'il y a d'autres questions là-dessus?Je regarde mon notion, non c'était tous les regex.
00:39:23 :Est-ce qu'il y avait d'autres questions sur les regexou sur d'autres choses que vous vouliez qu'on voit?Ou c'était clair et ça fait le tour?
00:39:36 :Le mieux pour les regex, c'est ce qu'on a besoin d'essayerde se casser un petit peu les dents dessuset puis de poster dans les forums de Discord.
00:39:51 :J'ai essayé ça, ça n'a pas matché ce que je voulais,puis de donner, je voulais matcher ça, j'ai essayé cet regexet puis il n'y a rien de mieux que d'expérimenter avec ça.
00:40:03 :Et il ne faut pas hésiter aussi, je sais que ça m'est arrivé pas mal de foisd'avoir l'impression que la regex marchait en testant sur,un peu comme je l'ai fait là, en testant sur deux chaînes de caractère,alors qu'en fait on veut tester des cas de figure beaucoup plus différents,
00:40:19 :beaucoup plus éparses.Donc il ne faut pas hésiter à, par exemple là sur le numéro de téléphone,on pourrait se dire, il faut aussi se mettre un peu,c'est le fameux truc qu'on dit que l'utilisateur il va toujours,c'est le meilleur pour faire planter votre trucet il ne faut jamais faire confiance à l'utilisateur.
00:40:36 :Donc là on pourrait se dire, par exemple sur le numéro de téléphone,on pourrait avoir quelqu'un qui a mis deux espaces au lieu d'un.Donc est-ce que ma regex elle va marcher?
00:40:45 :C'est là où il faut faire gaffe des fois avec les modifiers, les quantifiers,parce que des fois vous allez être très précis,vous allez prendre cinq chaînes de caractère en vous disant,c'est bon ça couvre tous les cas de figure avec le tiret, l'espace, le point, le machin,et vous n'allez pas prendre en compte le mec qui a fait une faute
00:41:03 :et qui a mis deux espaces à un endroit et votre regex ne marchera pas.Donc voilà, il ne faut pas hésiter aussi dans les données d'inputà faire plein de cas de figure et à voir si votre regex elle passe tout ça,et je trouve que pour ça regex 101 est bien,
00:41:18 :parce que vous pouvez vraiment en mettre 50 à la suiteet puis avec le code couleur vous voyez très rapidement si ça match tout ou pas.
00:41:26 :Donc voilà, petite précision là-dessus aussi.Oui, sans le R, le R c'est le fameux truc,oui effectivement bonne question aussi, je vais la repartager.Le R, vous l'avez peut-être vu quand j'ai mis le code generator,là il y a un R devant, c'est la même chose pour ceux qui l'ont vu
00:41:55 :quand je parle des chemins de fichiers sur Windows,où je vous dis qu'une façon très rapide quand vous avez un chemin de fichieret qu'il n'y ait pas de problème, c'est de mettre le R devant,donc R c'est raw string, ça veut dire chaîne de caractères brutes,et ça fait en sorte que les caractères spéciaux comme les //n, //t, //u,
00:42:14 :qui sont des caractères qui vont être interprétés,donc //n ça va être un retour à la ligne, //t c'est une tabulation,//u c'est le bell character, je sais plus.
00:42:24 :Donc par défaut ils vont être interprétés si vous ne mettez pas le R devant,et le problème c'est que dans les regex, en fait des // quelque chose,il y en a partout, vous avez vu //d, //machin,donc le problème c'est que vous pouvez avoir des cas de figure
00:42:38 :où votre regex ne va pas être compris,donc en mettant le R devant, et donc le R ne veut pas dire regex,le R veut dire raw string,c'est une façon de dire que vous voulez vraiment qu'il y ait // quelque chose,et pas que ce soit interprété comme un truc spécial.
00:43:01 :Et donc vous pouvez le retrouver, comme je vous dis, ailleurs,que si vous voyez un script, il n'y a pas de regex,mais c'est un script qui doit rouler sur Windows,ça se peut que vous voyez le petit R devant sur des chemins de fichierspour qu'il soit interprété comme des chênes de caractère brut.
00:43:23 :Bon, s'il n'y a pas d'autres questions, on va pouvoir s'arrêter là.Et effectivement, comme l'a dit Thierry,donc n'hésitez pas, si vous voulez tester ça,que ce soit sur Django, sur les regex, sur le scrapping,n'hésitez pas à poster sur le Discord,parce que c'est clairement le genre de trucs de domaine
00:43:44 :où il y a la théorie, il y a la pratique,vraiment sur Django un peu moins,Django c'est quand même assez carré, et puis les erreurs sont assez parlantes,mais le scrapping et les regex, c'est le genre de trucsoù des fois vous pouvez passer, ça c'est classique,le nombre de fois où sur des regex, je me suis tapé la tête contre les murs
00:44:01 :en me disant, mais pourquoi elle marche pas,elle est là ma regex, tout a l'air bien,et puis finalement c'est vraiment un détailou un truc que vous avez pas vu passer,que vous aviez pas anticipé,le scrapping c'est pareil, vous pouvez passer des heuresà essayer de récupérer un truc précis,
00:44:18 :et puis vous comprenez pas, c'est parce que le javascriptil est loadé après, ou des trucs comme ça,donc c'est clairement le genre de trucsoù d'être à plusieurs pour regarder le problème,ça aide beaucoup.
00:44:29 :Donc n'hésitez pas, si vous voulez tester des trucs là-dessus,à poser vos questions sur le serveur.C'est bon pour tout le monde?Bah si c'est bon et qu'il n'y a pas d'autres questions,on va s'arrêter là,et on va se dire à la semaine prochaine du coup,donc je pense qu'on va garder les samedis,
Aucune occurrence trouvée pour « ».