2017-09-26 3 views
-2

Je reçois une erreur 462 (le serveur distant n'existe pas ou est indisponible):l'utilisation de VBA pour gratter Youtube données: Problème avec traction Voir les données, 462 Erreur

Set QuestionField = html.getElementsByClassName("view-count style-scope yt-view-count-renderer") 

Je suis assez sûr que la vue informations que j'essaie de tirer est dans une balise de classe, et je ne sais pas pourquoi getElementsByClassName ne fonctionne pas pour tirer cette information.

Voici le code HTML correspondant de YouTube:

< 
span class="view-count style-scope yt-view-count-renderer">952 views 
< 
/span> 

Voici le code VBA:

Enum READYSTATE 
READYSTATE_UNINITIALIZED = 0 
READYSTATE_LOADING = 1 
READYSTATE_LOADED = 2 
READYSTATE_INTERACTIVE = 3 
READYSTATE_COMPLETE = 4 
End Enum 

Sub ImportYTData() 
Dim ie As InternetExplorer 
Dim html As HTMLDocument 

Set ie = New InternetExplorer 
ie.Visible = True 
ie.navigate "https://www.youtube.com/watch? v=0YNJQNpP9Do&list=PL_Lt8vbVLfk_pzt-TWzfk_GNAKp-ePXc1&index=22" 
Do While ie.READYSTATE <> READYSTATE_COMPLETE 
Application.StatusBar = "Trying to go to the YouTube Video ..." 
DoEvents 
Loop 

Set html = ie.document 
MsgBox html.DocumentElement.innerHTML 

Application.StatusBar = "" 

Dim RowNumber As Long 
Dim QuestionField As IHTMLElement 
Dim views As String 

Set QuestionField = html.getElementsByClassName("view-count style-scope yt-view-count-renderer") 
RowNumber = 4 

views = QuestionField.innerText 
views = Replace(views, "views", "") 
views = Replace(views, "view", "") 
Cells(RowNumber, 3).Value = Trim(views) 

Set html = Nothing 

End Sub 
+0

Qu'est-ce que vous voulez en fait de racler cette page très? Êtes-vous après tous les commentaires disponibles attachés à toutes les vidéos? – SIM

+0

_ "le serveur distant n'existe pas ou est indisponible" _ suggère que le problème est de contacter le serveur distant. –

+0

@ Shahin je veux juste le nombre de vue – Blake

Répondre

1

Notez que vous appelez une fonction getElements qui est pluriel. Cette fonction retourne une collection que vous essayez d'assigner à un seul élément. En d'autres termes, il y a un décalage.

Set QuestionField = html.getElementsByClassName("view-count style-scope yt-view-count-renderer") 

Une solution serait de changer votre déclaration DIM:

Dim QuestionField As IHTMLElementCollection 
+0

Merci! Maintenant, j'obtiens une erreur 462 avec Set QuestionField = html.getElementsByClassName ("affichage-count style-portée yt-view-count-renderer") – Blake

+0

L'appel à 'getElements' ne renvoie rien et votre code suppose que quelque chose sera retourné . Vous devez ajouter plus de code pour gérer cette situation. De plus, rappelez-vous qu'une collection est retournée, donc vous devrez soit boucler les résultats, soit retirer le premier élément, avant d'accéder aux propriétés. –