Extraire une section d'une page WebChers membres de la communauté,
J'essaie d'extraire une section de texte d'une chaîne longue et désordonnée. Je souhaite extraire la partie description d'une vidéo YouTube.
Par exemple, dans cette vidéo : https://youtu.be/yvoddqG-lm8 je voudrais extraire uniquement la partie description:
« Mia Stephens montre comment effectuer des analyses statistiques de base dans JMP. Elle couvre l'utilisation de la distribution pour analyser les données une variable à la fois. Utiliser Fit Y by X pour les analyses impliquant deux variables et utiliser Fit Model pour les analyses impliquant plus de deux variables. Elle passe également en revue les outils permettant de résumer et de représenter graphiquement les données. Cette vidéo est la troisième partie d'une série sur l'apprentissage des bases de l'utilisation de JMP pour tirer le meilleur parti de votre essai gratuit de 30 jours JMP ou de votre nouvelle licence JMP. Mia Stephens, ambassadrice académique de JMP, montre comment naviguer dans les menus et les tableaux de données de JMP, importer des données dans JMP, résumer et représenter graphiquement des données et effectuer des analyses statistiques de base. Cette démo utilise JMP 11, qui sera disponible en septembre. Découvrez les nouveautés de JMP 11 : http://www.jmp.com/software/preview-j..."
J'arrive à obtenir l'intégralité du script de la page Web sous forme de chaîne à l'aide de la commande suivante :
page = open (https://youtu.be/yvoddqG-lm8);
J'ai remarqué que la partie description que je recherche apparaît plusieurs fois dans la page. Notamment après ces termes :
\\!"description\\!":{\\!"runs\\!":[{\\!"text\\!":\\!"
Ou : \\!"description\\!":{\\!"simpleText\\!":\\!"
Aucune suggestion ?
Suis-je dans la bonne direction en extrayant le code entier de la page ou existe-t-il un moyen d'extraire directement uniquement la section que je recherche ?
Merci.
Re : Extraire une section d'une page Web - il manque quelque chose@LNitz - API YouTube pourrait aider. Les informations sur cette page peuvent ne pas fonctionner exactement comme indiqué, car le code HTML YouTube en cours de téléchargement semble avoir changé au cours de la dernière année.
Je pense que vous souhaitez créer une table de données JMP, ajouter les colonnes dont vous avez besoin et utiliser une boucle for ou des formules de colonne pour remplir les lignes du tableau.
Re : Extraire une section d'une page WebJ'ai essayé cette procédure soignée et je l'ai exécutée sans erreur.Mais je ne sais pas comment l'intégrer pour que le texte que je récupère soit publié dans un fichier JMP.Lorsque j'exécute ceci, ou une version légèrement différente pointant vers une page Web différente, le fichier que j'ai défini (appelé Page) ne reçoit aucune donnée de la page Web.
Voici mon code (y compris le fichier source original en commentaire) :
/*page = open ("https://youtu.be/yvoddqG-lm8");;*/
page = Open( "https://www.theatlantic.com/ideas/archive/2021/07/republicans-anti-history-marjorie-taylor-greene/619403" );
division = Regex( page, "<DIV id=".watch-description-text." class="..">(.*?)</DIV>]*>", "", globalreplace );
Re : Extraire une section d'une page WebSi cela ne vous dérange pas d'ajouter de nouveaux outils à votre boîte à outils (et que vous souhaitez éviter la complexité de l'analyse HTML avec des expressions régulières), vous pouvez profiter du Python Bridge de JMP (voici un aide pour l'utiliser avec la distribution d'Anaconda ) et utilisez un package conçu pour gérer l'analyse HTML, tel que BelleSoupe.
Ce paquet contient des tonnes de Documentation et exemples là-bas, donc une fois que vous avez compris comment transférer les données entre JMP et Python (détails ici ), vous pouvez vous concentrer sur ce que vous souhaitez extraire, puis sur ce que vous devez en faire dans JMP.
Re : Extraire une section d'une page WebSuper!
Pour tous ceux qui lisent : tout en haut, @Mark_Bailey a présenté le réticent ? opérateur:
description = Regex( page, "<meta name="\!"description\!"" content="\!"(.+?)\!"" />", "\1" );
Je l'ai recyclé comme .*? mais c'est la même idée et assez importante. Le ? suivant + ou * fait du + ou * réticent au lieu de cupide . + signifie un ou plus et * moyens zéro ou plus de tout ce qui se trouve sur son côté gauche... dans ce cas, un point. La période correspond à tout. Cupide signifie le * ou + je répéterai le . (qui correspond à n'importe quel caractère) jusqu'à la fin de la chaîne, soit environ 50 000 caractères. Dans l'exemple ci-dessus, l'expression régulière doit encore trouver "> . Il ne peut pas correspondre à la fin du texte, donc l'expression régulière commence à libérer les caractères acquis avidement, un à la fois, en testant "> .Il trouvera très probablement "> qui appartient à une autre chaîne citée vers la fin de la chaîne et finit par accepter le texte que vous souhaitez ainsi qu'un tas de texte supplémentaire.
Dans le réticent version, .*? correspond initialement à zéro caractère, mais ne trouve pas le "> . Donc l'expression régulière pousse le .*? avancer un caractère et tester à nouveau. Réticent je trouverai le tout prochain "> , pas un vers la fin du texte.
Souvent, le comportement gourmand et le comportement réticent obtiennent la même réponse, et le comportement gourmand est plus rapide. Mais dans cet exemple, les réponses sont différentes et la réticence est plus rapide (car elle avancera à contrecœur de quelques dizaines de caractères, alors que le cas gourmand devra peut-être avancer des milliers de caractères puis sauvegarder la plupart d'entre eux.)
Re : Extraire une section d'une page WebMerci @Craige_Hales
Cela frappe comme un éclair ! extraire exactement ce que je voulais et est robuste sur différentes pages YouTube.
c'est ma version finale
New Table( "Video list",
Add Rows( 3 ),
New Script(
"bring description from YouTube",
For( i = 1, i <= N Rows(), i++,
page = Open( :link[i] );
division = Regex(
page,
"<DIV id=".watch-description-text." class="..">(.*?)</DIV>]*>", "", globalreplace );
:webpagetext[i] = withouttags;
)
),
New Column( "Video",
Character,
"Nominal",
Set Values(
{"Getting Started With JMP, Part 1", "Getting Started With JMP, Part 2",
"Getting Started With JMP, Part 3"}
)
),
New Column( "Link",
Character( 83 ),
"Nominal",
Set Values(
{
"https://www.youtube.com/watch?v=xge-f1KV_oc&list=PL411D719858B57C47&index=2&t=5s",
"https://www.youtube.com/watch?v=xhZVuDrKiEA&list=PL411D719858B57C47&index=3&t=0s",
"https://www.youtube.com/watch?v=1M8LzJ8bjwg&list=PL411D719858B57C47&index=4&t=0s"
}
)
),
New Column( "webpagetext", Character, "Nominal", Set Values( {"", "", ""} ) )
)Re : Extraire une section d'une page WebVous essayez de récupérer le texte d’un extrait javascript json. Je pense qu'il sera plus facile de le récupérer à partir du code HTML plus bas. J'utilise . à la place des guillemets juste pour éviter que \ ne s'échappe. Ce
...
fonctionne car il n'y a pas de imbriqué dans celui-ci qui le ferait se terminer plus tôt. Regex ne gère pas les structures imbriquées par elle-même (mais la correspondance de modèles le peut).
Notez que l'id= du div identifie le texte souhaité, il peut donc être assez robuste pendant un certain temps.
page = open ("https://youtu.be/yvoddqG-lm8");
division = Regex ( page, "<DIV id=".watch-description-text." class="..">(.*?)</DIV>]*>","",globalreplace);"Mia Stephens montre comment effectuer des analyses statistiques de base dans JMP. Elle couvre l'utilisation de la distribution pour analyser les données une variable à la fois. Utiliser Fit Y by X pour les analyses impliquant deux variables et utiliser Fit Model pour les analyses impliquant plus de deux variables. Elle passe également en revue les outils permettant de résumer et de représenter graphiquement les données. Cette vidéo est la troisième partie d'une série sur l'apprentissage des bases de l'utilisation de JMP pour tirer le meilleur parti de votre essai gratuit de 30 jours JMP ou de votre nouvelle licence JMP. Mia Stephens, ambassadrice académique de JMP, montre comment naviguer dans les menus et les tableaux de données de JMP, importer des données dans JMP, résumer et représenter graphiquement des données et effectuer des analyses statistiques de base. Cette démo utilise JMP 11, qui sera disponible en septembre. Découvrez les nouveautés de JMP 11 : http://www.jmp.com/software/preview-j ..."
Re : Extraire une section d'une page WebMerci @Mark_Bailey pour votre solution. Il est robuste dans le sens où il récupère une chaîne propre à partir de n'importe quelle vidéo YouTube sur laquelle je l'ai essayé. Pourtant, il apporte une version abrégée de la description (il s'avère que le code de chaque vidéo inclut la description complète deux fois et la description courte 3 fois).
En essayant de modifier la commande regex, je ne sais pas pourquoi elles ne fonctionnent pas aussi bien que la vôtre. Avez-vous remarqué ce qui ne va pas avec mon script ?
Names Default To Here( 1 );
page = open ("https://youtu.be/yvoddqG-lm8");
// this works well for the short version of the description.
final = Regex ( page, "<meta name="\!"description\!"" content="\!"(.+?)\!"" />", "\1" );
// not working for the long version of the description.
final = Regex ( page, "description\\!":{\!"simpleText\!":\!"(.+?)\\!"},", "\1" );
Re : Extraire une section d'une page WebMerci, @txnelson pour les bonnes directions. En utilisant les fonctions de caractères les plus basiques, j'ai réussi à faire ceci :
Names Default To Here( 1 );
page = open ("https://youtu.be/yvoddqG-lm8");
startingpoint = Contains( page, "description\\!":{\\!"simpleText\\!":\\!"" );
rightremain = Substr( page, startingpoint + 32, Length( page ) );
endpoint = Contains( rightremain, "\\!"},\\!"lengthSeconds" );
final = Substr( rightremain, 0, endpoint - 1 );
Show( final );
À ce stade, lorsque j'ai essayé de dupliquer cela sur d'autres pages YouTube, j'ai découvert que le préfixe et le suffixe de la description complète étaient quelque peu incohérents et que je devrais donc en utiliser une variété pour trouver le point de départ et le point final corrects pour chacun.
Re : Extraire une section d'une page Webil y a quelque temps : Grattage d'écran Twitter et fondu enchaîné basé sur FFT
il utilise une expression régulière très simple pour localiser les URL des images :
x = Load Text File( "https://twitter.com/search?q=football&src=typd" );//cat%20OR%20dog%20OR%20turtle%20OR%20rabbit
Pat Match( x, // look for links to jpgs in the html
Pat Regex( "https://[^\!"']+?\.jpg" ) >> link + Pat Test(
// reject some links to small images and duplicates
If( !Contains( link, "bigger" ) & !Contains( link, "normal" ) & duplicate << Contains( link ) == 0,
duplicate[link] = 1; // remember this keeper
dt << addrows( 1 ); // make a row for it
dt:url = link;
dt << runformulas;// make sure it loads
);
1;
) + Pat Fail()// this forces the match to keep trying, recording all links
);
Il boucle, sans utiliser PatRepeat, avec PatFail(). PatFail ne correspond jamais et oblige le correspondant à réessayer à la position suivante. Chaque fois, il constate que https://.jpg modèle, il exécute du JSL pour traiter l'URL.
Je viens de l'essayer, apparemment, le football est toujours un terme de recherche viable. Vous obtiendrez environ 20 images lors de la première requête, et une nouvelle image environ toutes les quelques minutes par la suite.
Mark est sur la bonne voie, en utilisant les balises HTML pour identifier le contenu que vous souhaitez.
Re : Extraire une section d'une page WebJ'aime @txnelson suggestion. Vous pouvez également utiliser une expression régulière sur la chaîne de caractères. Tu pourrais voler, euh, je veux dire étude l'expression régulière pour les balises HTML dans l'Explorateur de texte. Lancez-le sur n'importe quelle colonne contenant des données de caractères. (Vous n'analysez pas vraiment le texte ici.) Cliquez sur le triangle rouge en haut de la plateforme et sélectionnez Options d'analyse > Personnaliser Regex . Il existe plusieurs expressions liées au HTML. Cliquez sur le bouton Ajouter (+) sous la liste des expressions pour accéder à la bibliothèque. Ajoutez ceux qui ont des noms prometteurs. L'éditeur vous permettra d'examiner et de modifier les expressions. Vous obtiendrez un retour immédiat avec l’exemple de texte en haut ou les exemples dans la définition.
Celui-ci pourrait être aussi simple que :
Names Default to Here( 1 );
page = Load Text File( "https://youtu.be/yvoddqG-lm8" );
description = Regex( page, "<meta name="\!"description\!"" content="\!"(.+?)\!"" />", "\1" );
Comme je l'ai dit, j'aime la suggestion précédente. Mais c’est bien d’avoir des options.
Re : Extraire une section d'une page WebRon,
J'ai écrit quelques analyseurs dans l'ordre de ce dont vous semblez avoir besoin.Je n'utilise généralement pas de fonction Open(), mais j'utilise Loat Text File() pour lire le fichier dans une longue chaîne.J'utilise ensuite Contains() pour arriver au point de départ, et Substr() la chaîne de tous les caractères après le décalage renvoyé par Contains(). Puisque vous lisez un fichier HTML, vous pouvez utiliser la structure de son langage de balisage pour configurer vos points de départ et vos délimiteurs.
Bonne chance