"Navigation" sur un site

Vous voulez de l'aide ? Postez ici :)
Sergent-Quentin
Posts: 274
Joined: 11 Jun 2014, 14:45

Re: "Navigation" sur un site

Post by Sergent-Quentin »

Je up ce sujet pour m'aider sur une regex svp :

Voici ma regex avec son texte :

Code: Select all

var html = '<a href="www.Vert.com"><a href="www.Rouge.com">';

/<a href="(.+?)">/.exec(html);
La regex m'affichera donc ce qui se trouvera entre <a href=" et "

Le résultat ( sous une boite de dialogue en mode "code") : RegExp.$1

Cela m'affiche donc : http://www.Vert.com

En revanche j'aimerais qu'il me trouve tous ( donc là les 2 ) ce qui se entre <a href=" et "

Savez-vous ce que je dois ajouter/modifier svp ?

J'ai lu plusieurs documents sur les regex, c'est assez casse tête mais à force de pratique ça fini par être plus facile à maîtriser

Merci à tous
Violette
Posts: 119
Joined: 10 Aug 2014, 17:42

Re: "Navigation" sur un site

Post by Violette »

Code: Select all

/<a.*?href="(.+?)".*?>/g
J'ai rajouté .*? avant et après le href dans le cas où le html ne soit pas très propre et qu'il y ai des espaces supplémentaires qui se baladent, ou encore qu'il y ai d'autres attributs dans tes balises de liens. Mais tu peux très bien les enlever sans soucis si il y a bien qu'un seul espace et aucun autre attribut ^^.
Sergent-Quentin
Posts: 274
Joined: 11 Jun 2014, 14:45

Re: "Navigation" sur un site

Post by Sergent-Quentin »

Merci pour ton code, je l'ai écrit donc comme ça :

Code: Select all

var html = '<a href="www.Vert.com"><a href="www.Rouge.com">';

/<a.*?href="(.+?)".*?>/g.exec(html);
Mais ça m'affiche toujours seulement http://www.Vert.com au lieu des 2 adresses ^^ j'ai oublié ou mal écrit quelque chose ? ^^
Violette
Posts: 119
Joined: 10 Aug 2014, 17:42

Re: "Navigation" sur un site

Post by Violette »

Oui, j'aurai du te le dire, exec retourne seulement la première occurrence.

Code: Select all

var re = /<a.*?href="(.+?)".*?>/g;
var str = '<a href="www.Vert.com"><a href="www.Rouge.com">';
var m, fin = [];

while ((m = re.exec(str)) !== null) {
    fin.push(m[1]);
}
Tu récup un tableau et tu peux accéder aux valeurs via fin[0], fin [1].
Sergent-Quentin
Posts: 274
Joined: 11 Jun 2014, 14:45

Re: "Navigation" sur un site

Post by Sergent-Quentin »

ça fonctionne merci beaucoup :D
Sergent-Quentin
Posts: 274
Joined: 11 Jun 2014, 14:45

Re: "Navigation" sur un site

Post by Sergent-Quentin »

Bonjour,

J'ai un petit problème ^^, je m'amusais à extraire des images, infos, etc...

Or, je suis tombé sur un site qui propose des produits ( sac pour les hommes ), je cherchais à télécharger certaines images mais c'est là que vient le problème, les images ne figurent pas dans le code source :(
En revanche on peut les voir lorsque on effectue un clic droit "Examiner l'élément".

Voici le site : http://www.aliexpress.com/store/product ... 57341.html

Les images que je parle se trouve en bas du site, alignées verticalement ( et suffisamment grosses pour ne pas les louper ^^ )

Est-ce-que quelqu'un pourrait éclairer ma lanterne et si possible m'aider à les extraire avec la regex ou un truc similaire :)

Je vous remercie.

Cordialement
Violette
Posts: 119
Joined: 10 Aug 2014, 17:42

Re: "Navigation" sur un site

Post by Violette »

Tu peux récupérer les liens avec une regex, et ensuite utiliser l'objet Téléchargement web sur ce lien et la méthode toImage() pour récupérer l'image.

Tu as tout le code déjà, juste à modifier la regex.

Code: Select all

/<div.*?id="custom-description".*?>[\s|\S]*?<div class="ui-box-body[\s|\S]*?<p align="center">(.*?)<\/p>/
Récupère la série de lien.

Code: Select all

/<img.*?src="(.+?)".*?>/g


Extrait liens 1 par 1.
Sergent-Quentin
Posts: 274
Joined: 11 Jun 2014, 14:45

Re: "Navigation" sur un site

Post by Sergent-Quentin »

Bonsoir,

Merci pour ta réponse, en revanche j'arrive pas à... assembler tout ça :s

Je voulais tester ta première regex ( la page est télécharger sous la variable str ) :

Code: Select all

var re = /<div.*?id="custom-description".*?>[\s|\S]*?<div class="ui-box-body[\s|\S]*?<p align="center">(.*?)<\/p>/g;

var m, fin = [];

while ((m = re.exec(str)) !== null) {
    fin.push(m[1]);
}
Normalement je crois que ça devrait m'afficher la totalité des liens de la balise <p align="center"> mais ça ne m'affiche rien :( ( je me suis peut-être tromper car je suis novice dans la matière ^^ )

Tu parlais de la méthode toImage(), je suis aller sur le wiki mais je n'arrive pas à télécharger une adresse sous code.

Sinon pour ton script, ce j'ai compris :

Il "entre" dabord dans custom-description :arrow: ui-box-body :arrow: align center puis il récupère la totalité des liens de align center et avec /<img.*?src="(.+?)".*?>/g tu récupère les liens de chaque image ( comme tu l'as dit, celle ci c'est une regex simple donc ^^ )

En résumé je n'arrive pas à assembler tout ça et faire le téléchargement ToImage() malgré le wiki :(
Violette
Posts: 119
Joined: 10 Aug 2014, 17:42

Re: "Navigation" sur un site

Post by Violette »

Alors je t'explique vite fait le truc, déjà bon je me dit je vais tester la chose. Je fait le script ça marche pas.
Ça commence bien.

71 ms pour télécharger la page et traiter la chose. Euh comment dire...
S'en suit 15 minutes de galère à me demander pourquoi mon Console.print dans le onFinished ne s'affiche pas. Et la réponse est simple mais sur le coup j’avoue j'avais complètement zappé. Actiona termine le script s'il n'a momentanément plus de calcul à faire donc, quand une fonction est asynchrone, ici la méthode download de l'objet web, si il n'y a plus rien à faire, une boucle qui tourne, un élément bloquant le script comme un QDialog.exec(), le script s’arrête. Donc votre fonction asynchrone, pouf, elle arrive jamais. JAMAIS. Sniff.

Bon je rajoute un while (page.isDownloading() === true) {} c'est degueux, osef ça fonctionne.

Tout content je relance mon script, avec un Console.print sur le retour des regex, null... Hum.
Console.print(page.toText()); la console se remplit de blanc, la barre de défilement rétrécit, mais c'est tout.
J'aurais du direct penser que la chaine est trop longue mais bien sur moi je me suis dit que le script ne téléchargeait rien... J'aurais aussi du penser direct à l'enregistrer dans un fichier mais non AHAHAH.
Donc j'ai galéré, jusqu'à l'enregistrer dans un fichier et voir que si, ça me téléchargeais bien la page... Pour rien vu qu'au final tout était bon, le soucis ne venait pas de là non plus. Juste quand la chaine est trop longue la console n'affiche plus rien.

Mais toujours des null sur le résultat des regex. Alors qu'elles marchent très bien. Donc j'ai encore galéré...
Jusqu'au moment où, O éclat de génie, j'ai fait une recherche d'un des liens attendus dans le fichier texte, et comble de stupeur, pas de lien !!!!!! WTF !!!!!!

Et j'ai découvert un truc que je n'avais pas du tout vu avant... TADAAAAAA... La description des objets est chargé en Ajax... Ahahah LOL LOL LOL LOL LOL TROP MARRANT... :'(

Bref, super bravo moi.

Donc ce que tu cherches ce situe a cette adresse : http://www.aliexpress.com/getDescModule ... 1871857341[/b]&t=1418062072163

Le paramètre t je sais pas à quoi il sert mais on s'en fou, ce qu'il faut c'est le productId qui change selon les produits. Et on peux le récup dans l'url du produit http://www.aliexpress.com/store/product ... 1871857341[/b].html

http://www.aliexpress.com/getDescModule ... 1871857341
Sergent-Quentin
Posts: 274
Joined: 11 Jun 2014, 14:45

Re: "Navigation" sur un site

Post by Sergent-Quentin »

Joli histoire ^^

J'avais oublier de te dire que la description de objets état chargé ailleurs ^^'

Je suis aller voir ton lien et le truc qui est marrant aussi c'est que j’étais déjà passer sur ce lien mais comme c'était tout coller j'ai jeter un coup d’œil un peu trop rapide... et du coup j'ai pas fait attention, bravo moi aussi :roll:

Merci en tous cas ^^

Mais avant de crier victoire trop vite, j'ai remarquer un truc qui pose une grosse difficulté :

En allant sur une autre page de produits et allant sur le même genre de lien que tu m'as donné ( ajax ), j'allais extraire les images qui m’intéresse ( les grosses images du produit ) et j'ai remarquer que dans chaque lien ajax, c'est écrit quasi différemment.

Pour expliquer la chose plus clairement voici 2 liens comportant un produit suivit de leur url ajax qui contiennent les images recherchés :

Lien n°1 : http://www.aliexpress.com/store/product ... 21076.html

Ajax : http://www.aliexpress.com/getDescModule ... =900021076

Lien n°2 : http://www.aliexpress.com/store/product ... 31638.html

Ajax : http://www.aliexpress.com/getDescModule ... 1195231638

Dans chacune des ajax il y a donc les images qui m'intéressent à commencer par celle ci dans la première ajax :
http://g01.s.alicdn.com/kf/HT14QZLFGhbX ... 82bf5f7452

Et celle-ci dans la deuxième ajax :
http://i00.i.aliimg.com/img/pb/808/762/ ... 08_271.jpg

Le problème, le voici :

Dans les 2 ajax ils y a les images qui m'intéressent (les gros format ) et ils y a des images qui ne m’intéressent pas ( les petits formats et autres )

"C'est simple tu place une regex qui débute à un endroit fixe et qui se termine à un endroit fixe comme d'habitude"

Ah j'aurai bien voulu :) malheureusement je ne peux pas car il n'y a pas d'endroit fixe, l'ajax est quasi complètement différente de l'autre donc du coup on peut pas poser de regex fixe pour extraire les images que l'ont veut :(

Dans la première ajax ça débute par :

font-family: arial;"> <img src="Mon image"

Dans la deuxième ajax ça débute par:

Product.getSubject()" src="Mon image"

Impossible de dire " tu prendre entre tel mot et tel mot " car c'est jamais les mêmes :s

J'ai penser à faire un filtrage une fois tous les liens entre src" et " extrait mais ça servirait pas à grand chose car certains liens se ressembles

J'ai regarder de quasiment partout, chercher plusieurs solutions pour savoir ou faire débuter la regex et ou à faire terminer sans succés....
Violette
Posts: 119
Joined: 10 Aug 2014, 17:42

Re: "Navigation" sur un site

Post by Violette »

Hum ouais je voit, ben c'est chiant il faut extraire tout les liens des images. Les télécharger et les enregistrer dans un objet Image, récupérer leurs tailles, et n'enregistrer que celles qui font plus qu'une certaine taille.

M'enfin perso c'est ce que je ferais.
Sergent-Quentin
Posts: 274
Joined: 11 Jun 2014, 14:45

Re: "Navigation" sur un site

Post by Sergent-Quentin »

Je pense aussi que c'est l'unique et bonne solution

Je créer une action "Téléchargement Web" en mettant comme url : http://i01.i.aliimg.com/img/pb/855/762/ ... 55_490.jpg, cette dernière est stocker sous une variable.

Mais je n'arrive pas à enregistrer et retourner les dimensions de l'image.

str.size() pour connaître les dimensions de l'image normalement mais j'arrive pas à assembler correctement le tout :?
Violette
Posts: 119
Joined: 10 Aug 2014, 17:42

Re: "Navigation" sur un site

Post by Violette »

Code: Select all

tavariable.toImage();
Sergent-Quentin
Posts: 274
Joined: 11 Jun 2014, 14:45

Re: "Navigation" sur un site

Post by Sergent-Quentin »

Dac il faut bien l'écrire comme ça ? :

Code: Select all

var adresse = new Web();
adresse.toImage();
Je n'arrive pas à assembler le code corectement le code, voici ce que j'ai pour le moment :

Code: Select all

var adresse = new Web();
adresse.toImage();
var adresse = new Image();
adresse.size();
ça m'affiche widht : 0 et height : 0
Violette
Posts: 119
Joined: 10 Aug 2014, 17:42

Re: "Navigation" sur un site

Post by Violette »

Ben normal... Bon j'ai fait une petite fonction pour télécharger des images à partir de leurs liens

Code: Select all

function dll_Image(url) {
	var data = [], image = [], erreur = []; //Variable local
	for (var i = 0; i < url.length; i++) { //Boucle sur le tableau contenant les urls précédement extraite
		data[i] = new Web({ //Création objet web pour télécharger données
			onFinished : function() { //Callback téléchargement fini
				image[i] = data[i].toImage(); //Données téléchargées transformé en objet image
			},
			onError : function(error) { //Callback gestion erreur
				erreur[url[i]] = error; //Ajout erreur dans objet erreur
			}
		});
	
		data[i].download(url[i]); //Téléchargement données
	
		while (data[i].isDownloading() === true) {} //Pour éviter qu'Actiona se ferme pendant le téléchargement si il n'y a plus d'action à effectuer
	}
	
	return {image : image, erreur : erreur}; //Retourne objet contenant propriété image (tabeau) et propriété erreur (tableau)
}
Utilisation

Code: Select all

var url_image = ["https://wiki.actiona.tools/lib/tpl/dokuwiki/images/logo.png", "https://wiki.actiona.tools/lib/tpl/dokuwiki/images/logo.png"];

var image = dll_Image(url_image);

for (var i = 0; i < image.image.length; i++) {
	Console.print(image.image[i].size());
}

Console.log(image.erreur);
Post Reply