Extraire une portion de page HTML à partir d’Access
Dans l’épisode précédent (Enregistrer une page HTML à partir d’Access), vous avez vu comment enregistrer une page Web entière sur disque. Cette fois, on va essayer d’extraire seulement une portion de la page.
Le principe
Une page HTML est décomposée en blocs, délimités par des balises HTML comme body
, div
, table
, etc. Ces blocs sont imbriqués les uns dans les autres. Certains blocs – souvent importants, et en principe uniques sur une page – sont en général nommés par un identifiant (id
). Par exemple, la zone centrale de ce blog est une division HTML nommée content
.
C’est le code source de la page HTML qui nous donne le fameux id
:
Notre objectif est d’extraire le texte de tous les articles du bloc content
, en éliminant les bandes latérales du site. A partir de l’id
, et en utilisant la méthode DOM getElementById()
, on peut extraire la portion de HTML souhaitée.
Le code VBA
La fonction VBA ci-dessous est donc directement dérivée de celle de l’article précédent :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
' --- ' SAUVEGARDE D'UNE PORTION DE PAGE WEB ' A L'AIDE DE INTERNET EXPLORER ' --- ' Function EnregistrerBlocHTML( _ ByVal strURL As String, _ ByVal strFichier As String, _ ByVal strID As String) As Boolean ' Démarrer et afficher Internet Explorer On Error GoTo EnregistrerHTMLErr Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") ' Naviguer vers l'adresse souhaitée ' et attendre qu'elle soit chargée ie.navigate strURL While ie.Busy DoEvents Wend ' Extraire la zone demandée (par son ID) Dim doc As MSHTML.HTMLDocument Dim bloc As MSHTML.IHTMLElement Set doc = ie.Document Set bloc = doc.getElementById(strID) If bloc Is Nothing Then EnregistrerBlocHTML = False Exit Function End If ' Créer et ouvrir le fichier texte Dim intHandle As Integer intHandle = FreeFile Open strFichier For Output As #intHandle ' Ecrire le contenu HTML de la page Web dans le fichier Print #intHandle, bloc.innerHTML ' Fermer le fichier et Internet Explorer Close #intHandle Set bloc = Nothing Set doc = Nothing ie.Quit ' Renvoyer un code de succès EnregistrerBlocHTML = True Exit Function EnregistrerHTMLErr: MsgBox "Erreur : " & Err.Description, vbExclamation EnregistrerBlocHTML = False Exit Function End Function |
La fonction accepte 3 arguments :
- Le 1er paramètre de la fonction est l’adresse de la page Web à visiter.
- Le 2ème paramètre est le chemin complet du fichier à créer sur votre disque.
Attention : si le fichier pointé existe, il sera écrasé sans avertissement. Vous pouvez toujours améliorer le code ! 🙂 - Le 3ème paramètre est l’identifiant (
id
) du bloc HTML à extraire. - La fonction fournie renvoie
True
si la sauvegarde du bloc HTML a pu se faire correctement, etFalse
sinon.
Tester la fonction
Pour tester la fonction rapidement, utilisez la fenêtre Exécution :
- Appuyez sur
CTRL
+G
. - Tapez dans la fenêtre Exécution quelque chose comme :
? EnregistrerBlocHTML("http://grenier.self-access.com", "C:\Documents and Settings\Hervé\Mes documents\grenier.html", "content")
Bien sûr, vous aménagez le chemin du fichier en fonction de votre propre identifiant de session Windows. Et si vous travaillez sur Vista/7, le chemin a plutôt la forme"C:\Users\Hervé\Documents\grenier.html"
.
Titi > Bien vu ! J’ai rectifié l’erreur. Merci !
Bonsoir.
Dans l’exemple de test, il y a une erreur = ? EnregistrerHTML(« http://grenier.sel….
il faut plutot mettre = ? EnregistrerBlocHTML(« http://grenier.sel….