Télécharger des fichiers à la suite d'une matchcollection

Signaler
-
Messages postés
14880
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juin 2020
-
Bonjour,

Pour le moment j'ai une listbox avec mes liens de page internet, j'extrais les liens des images depuis le code source puis ajoute ces "url image" dans une 2eme listbox avant de tout télécharger...mais c'est long sur 2000 url et mes liens expirent avant la fin du processus.

listbox1 -> extraction de l'url image -> listbox2 -> téléchargement de l'image

Je cherche donc un moyen de télécharger les images au fur et à mesure de l'extraction sans cette deuxième listbox pour contourner ce problème de lien expiré.

Ex: Lien 1 de Link_Listbox -> récupération de l'url image -> téléchargement de l'image 1
Lien 2 de Link_listbox > récupération de l'url image -> téléchargement de l'image 2


 If MsgBox((NumericUpDown2.Value.ToString - NumericUpDown1.Value.ToString + 1) & " images to download." & vbNewLine & "It may take a while to complete." & vbNewLine & "Do you want to continue?", vbYesNo + vbInformation, "logiciel en test") = MsgBoxResult.Yes Then
            Try
                Dim wc As New WebClient
                For Each itm As String In Link_Listbox.Items
                    Dim source As String = wc.DownloadString(itm)
                    Dim m1 As MatchCollection = Regex.Matches(source, "<img id=\""pvImg\"" src=\""(.*)\"" alt=", RegexOptions.IgnoreCase)
                    For Each m As Match In m1
                        System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 Or SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12
                        wc.DownloadFile(m.ToString), PathTextBox.Text & "\T" & Reel_TextBox.Text & "_page_" & (i + 1).ToString & ".jpg")
                        Next
                    Threading.Thread.Sleep(100)
                Next
            Catch ex As Exception
                MsgBox(ex, MsgBoxStyle.Exclamation)
                Exit Sub
            End Try
            MsgBox("Download completed!", MsgBoxStyle.Information)


Je bloque sur la ligne wc.DownloadFile(m.tostring)...
J'espère avoir été clair.

Merci d'avance pour votre aide.

Flo

4 réponses

Messages postés
14880
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juin 2020
413
Bonjour,

Comme ça
Dim pattern As String = "(?<=img id=""pvImg"" src="")[^""]*"

Merci beaucoup pour ton aide !
Messages postés
14880
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juin 2020
413 > Tiflo62
de rien
Messages postés
14880
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juin 2020
413
Bonjour

Ici https://codes-sources.commentcamarche.net/forum/affich-10101039-impossible-de-telecharger-une-image-d-une-url-https#1

Je t'avais déjà déconseillé les suites de & pour construire des strings, faut croire que les conseils n'engagent que ceux qui les donnent....

Est ce que tu peux donner un morceau de texte contenant le lien que tu cherches à extraire. Parce que là, selon ta syntaxe, c'est pas uniquement le lien que tu extrais
Bonjour,

Je n'ai pas encore corrigé cette partie contenant les &.
Je cherche surtout à résoudre le souci avant d'améliorer la totalité de mon code.
Voici le lien d'où j'extrais l'image:
 
http://heritage.canadiana.ca/view/oocihm.lac_reel_t18588/1372?r=0&s=2


Merci pour ton aide.
Messages postés
14880
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juin 2020
413
Tu trouveras ici (lien non cliquable il faut le copier coller)
http://regexstorm.net/tester?p=%28%3f%3c%3dimg+id%3d%22pvImg%22+src%3d%22%29%5b%5e%22%5d*&i=%3csection+id%3d%22pvPane%22+class%3d%22mb-3%22%3e%0d%0a++++++++%3csection+id%3d%22pvImageContainer%22%3e%0d%0a++++++++++%3cdiv+id%3d%22pvImageInner%22%3e%3cimg+id%3d%22pvImg%22+src%3d%22https%3a%2f%2fimage-iris.canadiana.ca%2fiiif%2f2%2foocihm.lac_reel_t18588%252Fdata%252Fsip%252Fdata%252Ffiles%252F1372.jpg%2ffull%2f!1024%2c1024%2f0%2fdefault.jpg%3ftoken%3deyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJDQVAiLCJkZXJpdmF0aXZlRmlsZXMiOiJvb2NpaG0ubGFjX3JlZWxfdDE4NTg4XFwvZGF0YVxcL3NpcFxcL2RhdGFcXC9maWxlc1xcLy4rXFwuKGpwZ3xqcDJ8dGlmKSIsImlhdCI6MTU4ODg3MTUzNSwiZXhwIjoxNTg4OTU3OTM1fQ.vdahYXm60ux1MkbD3MHq1vEHjgt9LIXsMoeuci0VBC0%22+alt%3d%22Image+1372%22%3e%3c%2fdiv%3e%0d%0a++++++++++%3ca+id%3d%22pvImgPrev%22+class%3d%22pv-imagelink+pv-imagelink-left+hidden%22%3e%3cspan+class%3d%22pv-imagelink-text%22%3e%26laquo%3b%3c%2fspan%3e%3c%2fa%3e%0d%0a++++++++++%3ca+id%3d%22pvImgNext%22+class%3d%22pv-imagelink+pv-imagelink-right+hidden%22%3e%3cspan+class%3d%22pv-imagelink-text%22%3e%26raquo%3b%3c%2fspan%3e%3c%2fa%3e%0d%0a++++++++++%3caside+id%3d%22pvComponent%22+class%3d%22p-3+hidden%22%3e%0d%0a++++++++++++%3cdiv+class%3d%22btn-group%22%3e



Un exemple avec ce pattern
(?<=img id="pvImg" src=")[^"]*

Le site regexstorm utilise le moteur de regex de .Net

Ensuite, pour obtenir le texte capture, il faut utiliser la propriété Value de l'objet Match
https://docs.microsoft.com/fr-fr/dotnet/api/system.text.regularexpressions.capture.value?view=netcore-3.1#System_Text_RegularExpressions_Capture_Value
Merci pour ton aide, je ne connaissais pas ce testeur.
J'arrivais déjà à récupérer le lien mais je l'envoyais ensuite vers une listbox pour télécharger un lot d'images d'un coup.
Là je veux qu'il se télécharge au fur et à mesure dès qu'il est extrait.
Je vais parcourir ton lien, merci.
Messages postés
14880
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juin 2020
413
J'arrivais déjà à récupérer le lien

ben à ce compte là, il fallait montrer un code qui récupère le lien, parce que là ta regex elle récupère
"<img id="pvImg" src="
plus le lien, donc y'a un traitement derrière, soit utiliser le groupe de capture soit faire un traitement (substring, replace) etc... sur la value compète.
Or dans ce que tu as montré, tu n'utilisais même pas Value.
Étonnant car je récupère bien seulement les liens-image !
> Tiflo62
Autant pour moi... Je récupère bien un peu de code avant le lien, j'arrivais quand même à télécharger le fichier, bizarre...
Comment déclarer le pattern (?<=img id="pvImg" src=")[^"]* ?
Les guillemets de pvImg me compliquent la tâche ou alors je m'y prends mal.

Merci d'avance.