Analyser HTML en VBA pour en extraire des informations à partir de la description de la liste?
Je veux extraire des informations à partir d'un site web avec Excel XP
.
J'ai trouvé un exemple de code (http://www.wiseowl.co.uk/blog/s393/scrape-website-html.htm) et j'ai essayé le suivant:
Function strHtmlElementValue(htmldoc As HTMLDocument, id As String) As String
Dim HtmlElement As IHTMLElement
Set HtmlElement = htmldoc.getElementById(id)
strHtmlElementValue = id & ": " & HtmlElement.innerText
End Function
Je l'ai essayé avec l'URL suivante (chargé comme le htmldoc
): http://www.immobilienscout24.de/expose/73940554
Si j'utilise la chaîne "exposez-titre:" pour l'id, la fonction renvoie le titre de la page, ce qui est bien.
Mais comment puis-je accéder à l'e. g. des informations comme le prix?
Dans le code Html, ça ressemble à ça. Il n'y a pas d'ID et si j'essaie d'utiliser le nom de classe "is24qa-kaufpreis" pour getelementbyid
, je reçois un message d'erreur.
<dl>
<dt>
<strong class="is24qa-kaufpreis-label">
Kaufpreis:
</strong>
</dt>
<dd class="is24qa-kaufpreis">
2.190.000,00 EUR
</dd>
</dl>
Alors, est-il un chemin pour accéder aux champs comme ceci "is24qa-kaufpreis" directement et lire le texte interne (dans ce cas, le 2.190.000,00 EUR?
- Ce que vous voulez est
getElementsByClassName
- notez que cette fonction retourne une collection d'éléments correspondants, de sorte que vous pouvez faire quelque chose comme:Dim els: Set els = htmldoc.getElementsByClassName("is24qa-kaufpreis")
Puisels(0)
contiendra le premier match à partir de votre document. Remarque:getElementsByClassName
est d'abord apparu dans IE9, donc pas sûr que ce sera disponible sur votre système. - Première chose que j'ai essayé était un couple de variations de getElementsByClassName("is24qa-kaufpreis") et ne pouvait pas les amener à travailler (je suis en cours d'exécution IE11). Si vous l'essayez, laissez-moi savoir si cela fonctionne pour vous.
Vous devez vous connecter pour publier un commentaire.
Il y a un certain nombre de façons différentes que vous pourriez aller à ce sujet. Le code suivant montre deux approches fondées sur "getElementsByTagName." Dans le code source de la page web, si vous pouvez compter qui exemple de div "dd" kaufpreis est en vous, alors vous pourriez utiliser la première méthode. Une approche plus générale, qui est montré par la suite.
Cela a fonctionné pour moi. IE11, mais devrait fonctionner avec IE9+.
Utilisation
pour Kaufpreis;
Utilisation
pour 2.190.000,00 EUR.
(0) est le nombre de la même balise d'élément, il peut y avoir plusieurs entrées avec le même nom de balise dans le code, pour récupérer leur utilisation ("tag")(0), ("tag")(1),...,("tag")(n).
Je suggère des recherches sur les sujets concernant l'enfant ou de sous-éléments à des fins d'automatisation.
Rappelez-vous aussi que Excel peut faire ses propres requêtes web. Sur les Données d'Importation de Données Externes - Nouvelle Requête sur le Web menu (Alt + D, D, W). Alors vous devez vous référer à elle comme feuil2!a22 ou quoi que ce soit. C'pas bon pour une page qui change constamment de la disposition.
Sélecteur CSS:
.querySelector méthode de HTMLDocument pour appliquer un sélecteur CSS de
dd[class='is24qa-kaufpreis']
Cela dit obtenir le premier élément avec le nom de la balise
dd
avoirclass
attribut de jes24qa-kaufpreis'
."[]"
moyen de l'attribut.CSS requête:
VBA:
Vous avez besoin pour obtenir le HTMLDocument objet, mais les autres réponses montrent déjà meothds pour cela.