Comment récuperer des pages web...

Comment récuperer des pages web... - VB/VBA/VBS - Programmation

Marsh Posté le 23-06-2004 à 20:15:14    

Bonjour à tous,
 
Sur un site web, je voudrais récupérer pas mal de page (2000 au moins !)pour concerver les données qui s'y trouvent (Car à la prochaine refonte du site, elle risque de ne plus etre accessibles).
 
Il y a des logiciel tel que MemoWeb ou autres qui permettent de rappatrier un site.
Mais celà ne marche par sur ce site pour la simple raison que ces pages ne sont pas accessible par des liens sur ce site, mais uniquement en entrant les adresses des pages concernées.
Ainsi, de tel logiciel ne trouvant pas de liens sur ces pages ne rappatrie jamais celle-ci.
 
Je connais bien sur les adresse web de chaque page (ce ne sont que des n° à changer dans l'url pour passer de l'une à l'autre).
 
Ainsi, je voudrais rappatrier et sauvegarder en automatique ces diverses pages. (Un fichier html+ images éventuelles par pages)
 
Comment faire ?
Il s'agit de pages php (j'y connais rien à ce sujet)
C'est principalement pour récupérer du text.
Par la suite, sans doute aussi certaine images...
Sous Visual Basic 5.0 ou Excel VBA
 
 
Merci de vos conseils, programmes, astuces, fonctions, adresse web...  
qui pourrais m'aider...

Reply

Marsh Posté le 23-06-2004 à 20:15:14   

Reply

Marsh Posté le 23-06-2004 à 20:23:15    

Laisse-moi 5 minutes, je teste ça en VBS et j'arrive ;)

Reply

Marsh Posté le 23-06-2004 à 20:36:52    

Dieu a fini :)
 


on error resume next
' Au cas ou une page n'existe pas, on évite de planter c'est mieu...
 
const genericURL = "http://forum.hardware.fr/hardwarefr/Programmation/sujet-5383*-1.htm"
const genericFIC = "sujet-5383*-1.htm"
 
dim i
dim fso
dim fil
dim inet
 
set fso = CreateObject("Scripting.FileSystemObject" )
set inet = CreateObject("InternetExplorer.Application" )  
inet.visible = false
 
for i = 0 to 9
 inet.Navigate (Replace(genericURL, "*", cstr(i)))
 Do While Not inet.ReadyState = 4  
  ' Ne rien faire
 Loop  
 set fil = fso.CreateTextFile("c:\" & Replace(genericFIC, "*", cstr(i)))
 fil.Write(inet.document.body.innerHTML)
 fil.Close
next
 
msgbox("fini" )


 
Je te laisse te démerder pour récupérer les feuilles de style et autres conneries (scripts, etc)
 
PS: Pour récupérer des images ça sera moins aisé. J'avais fait un aspirateur de sites de c*l mal protégé, mais j'ai paumé le code, alors je peux pas de le montrer, et contrairement à ce bout de code que j'a i pu pondre les yeux fermés, je me souviens que j'avais galèré, et j'avais fait ça en C# de toute façon :)


Message édité par Arjuna le 23-06-2004 à 20:45:39
Reply

Marsh Posté le 23-06-2004 à 20:39:39    

PS: tu n'as besoin d'aucun soft, juste un PC sous Win95 ou ultérieur avec IE 4.0 minimum.
 
Tu colles ce code dans un fichier "Arjuna est la plus belle des déesses.vbs" (en plus ça rhyme) et t'as plus qu'à double cliquer dessus pour télécharger 10 topics de ce forum. Je le laisse l'adater pour répondre à tes besoins.

Reply

Marsh Posté le 23-06-2004 à 20:51:45    

Merci, ça marche super bien !
Et c'est tout simple.
 
Et tu sais comment récuper une image ou un fichier à partir de l'url ?
 
Merci

Reply

Marsh Posté le 23-06-2004 à 20:53:01    

Il te faudra passer par un prog compilé et utiliser une lib de sock.
 
Je te cherche un lien vers un programme que j'ai fait et qui télécharge des fichiers binaires.

Reply

Marsh Posté le 23-06-2004 à 20:54:07    

Reply

Marsh Posté le 23-06-2004 à 21:10:24    

Merci pour ces infos.
Là ça va être plus long à tout regarder...
 
A+

Reply

Marsh Posté le 23-06-2004 à 23:35:11    

ReBonsoir,
 
J'ai modifier un petit peu le 1er code que tu m'as donné.
Il se trouve maintenant dans une Sub appelé avec les paramètres : Url et Fichier ce qui me simplifit l'ajout au reste de mon programme. Je l'utilise dans Excel.
 
Or j'ai un problème au niveau des ressources...
En faite, lorsue j'appel une centaine de fois cette sub pour sauver une centaine de pages web différentes, les ressources baisse beaucoup trop. Y a un truc qui reste en mémoire...
Par contre, il suffit que je ferme manuellement toutes les fenetre d'internet explorer pour que les resources soit libérées.
 
Y reste quoi en mémoire ? Comment le libéré ?
 
Merci, A+
 
Sub SauvePage(Url As String, Fichier As String)
 
'- Pour éviter de planter en cas d'erreur -
On Error Resume Next
 
Dim fso
Dim fil
Dim inet
 
Set fso = CreateObject("Scripting.FileSystemObject" )
Set inet = CreateObject("InternetExplorer.Application" )
 
'- N'affiche pas la fenêtre -
inet.Visible = False
 
'- Chargement de la page web -
inet.Navigate (Url)
'- Attente de fin de chargement -
Do While Not inet.ReadyState = 4
Loop
 
'- Sauvegarde de la page dans un fichier -
Set fil = fso.CreateTextFile(Fichier)
fil.Write (inet.document.body.innerHTML)
fil.Close
 
fil.Quit
Set fil = Nothing
 
inet.Quit
Set inet = Nothing
 
fso.Quit
Set fso = Nothing
 
End Sub

Reply

Marsh Posté le 24-06-2004 à 10:25:16    

inet.close (ou .quit je sais plus)
 
Mais surtout, fout la création de ton inet en dehors du sub, pas besoin de créer autant de inet que de page chargées, le même que tu réutilises à chaque page suffit amplement ;)

Reply

Marsh Posté le 24-06-2004 à 10:25:16   

Reply

Marsh Posté le 24-06-2004 à 15:13:12    

Bonjour,
 
Merci pour ta réponse.
J'ai essayer avec inet.close et avec inet.quit (d'après l'aide ce serait .quit à utiliser)
Mais celà ne change rien, les ressources sont consommées apparament par Internet Explorer (quand je le ferme complètement à la main, les ressources sont libérées)
 
J'ai aussi essayer le CreatObjet pour inet or de cette sub afin de n'y passer qu'une seule fois mais alors, c'est comme si le script ne trouve pas ou pert la connection et reste bloqué dans la boucle Do loop. Peut etre était ce du au web à ce moment, mais nombreux essai et toujours comme celà.
 
Par contre, lorsque je ne fais qu'une seule sub sans en appeler d'autre et en faisant une seule fois le set inet, là ça marche impec (Mais pas pratique du tout à programmer, le programme n'est pas lisible et des doublons, donc bof !) et les ressources non consommé même pour 2000 fichiers ! (Dans les autres cas, ressources à 0% avant le 200ème fichiers)
 
Donc apparement problème entre la déclaration set inet dans une autre sub et lors de son utilisation dans la sub...
y a t il un truc à mettre pour déclarer le set inet globalement pour toutes les sub ?
 
Sinon, j'ai vu aussi sur d'autres site que inet, marchais mal parfois... et qu'en général, il vaut mieux utiliser autre chose... mais alors, c'est beaucoup plus compliqué, sans doute comme ton autre code que j'ai pas encore regardé.
 
A+

Reply

Marsh Posté le 24-06-2004 à 15:16:11    

Dim inet  
Set inet = CreateObject("InternetExplorer.Application" )  
'- N'affiche pas la fenêtre -  
inet.Visible = False  
 
SauvePage ... (plusieurs fois)
 
inet.Quit  
Set inet = Nothing  
 
' *-*-*-*-*-*-*-*
 
Sub SauvePage(Url As String, Fichier As String)  
 
'- Pour éviter de planter en cas d'erreur -  
On Error Resume Next  
   
Dim fso  
Dim fil  
 
Set fso = CreateObject("Scripting.FileSystemObject" )  
 
 
'- Chargement de la page web -  
inet.Navigate (Url)  
'- Attente de fin de chargement -  
Do While Not inet.ReadyState = 4  
Loop  
 
'- Sauvegarde de la page dans un fichier -  
Set fil = fso.CreateTextFile(Fichier)  
fil.Write (inet.document.body.innerHTML)  
fil.Close  
 
Set fil = Nothing  
Set fso = Nothing  
 
End Sub  

Reply

Marsh Posté le 24-01-2005 à 15:37:03    

Bonjour,
moi aussi j'ai un problème similaire à celui-ci, en fait je voudrai me connecter à un site et ensuite envoyer une requete qui va me permettre d'extraire des données. Savez-vous comment faire?
merci


---------------
bou
Reply

Marsh Posté le 24-01-2005 à 17:19:14    

Arjuna a écrit :

PS: tu n'as besoin d'aucun soft, juste un PC sous Win95 ou ultérieur avec IE 4.0 minimum.
 
Tu colles ce code dans un fichier "Arjuna est la plus belle des déesses.vbs" (en plus ça rhyme) et t'as plus qu'à double cliquer dessus pour télécharger 10 topics de ce forum. Je le laisse l'adater pour répondre à tes besoins.


 
:lol:  
 
Déesse Arjuna,
Je vous salue bien bas,
Par ces lignes scripté,
Vous m'avez bluffé   ;)  
 
 
Plus simplement, je trouve ta solution trés astucieuse.
 
Pour bouchrabouchra, si les données qu tu souhaite récupérer sont des pages web, tu as la solution juste au-dessus.


Message édité par -Farenheit- le 24-01-2005 à 17:19:43
Reply

Marsh Posté le 24-01-2005 à 18:24:33    

regarde dans l'adresse suivante pour mieux comprendre:
http://69.159.241.96/alliancewebse [...] ysFilter=1


---------------
bou
Reply

Marsh Posté le 13-04-2006 à 14:24:20    

Bonjour,
 
j'ai reutilisé le 1er script pour telecharger un fichier .txt depuis un serveur local.
 
Tout se passe bien, mais dans le fichier qui en resulte <PRE>... </PRE> à été rajouté:
<PRE>texte
test
texte
.....
</PRE>
 
Comment ne pas avoir cette incertion?
 
De plus, si le fichier n'existe pas, il me recopie la page d'erreur 404. est il possible plustôt de generer une erreur afin de ne pas traiter de fausses information?


Message édité par tcoll le 13-04-2006 à 14:34:01
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed