2017-08-22 1 views
0

Ich versuche, alle href Links von Produkten von this link zu kratzen.VBA: Suche nach verschachtelten Elementen in HTML Dokument

ich den folgenden Code bin mit dem Produkt Link auf der Seite zu bekommen:

Sub urlCatch() 

Dim internet As Object 
Dim internetdata As Object 
Dim div_result As Object 
Dim header_links As Object 
Dim link, itm As Object 
Dim url As String 
Dim X As Variant 

Set internet = CreateObject("InternetExplorer.Application") 
internet.Visible = True 

url = "http://www.dell.com/vg/p/desktops.aspx?c=vg&cs=vgdhs1&l=en&s=dhs&~ck=mn" 
internet.Navigate url 

Do Until internet.ReadyState >= 4 
    DoEvents 
Loop 


Set internetdata = internet.document 
Set div_result = internetdata.getelementsbyclassname("categorySubNavigation").getelementsbyclassname("c4 seriesOptions") 
Set header_links = div_result.getelementsbytagname("a") 
For Each itm In header_links 
    Set link = itm.ChildNodes.Item(0) 
    Cells(Range("A" & Rows.Count).End(xlUp).Row + 1, 1) = link.href 
Next 

End Sub 

ich einen Fehler bei div_reult bin immer: „Objekt nicht diese Eigenschaft oder Methode“.

Dies ist das erste Mal, dass ich ein Element bin mit etwas holen, vielleicht könnte ich Fehler werden zu machen, die ich zur Zeit aus nicht bewusst bin.

Bitte schauen Sie in meinem Code, und lassen Sie mich wissen, welche Fehler ich hier mache.

Ich bin von einem meiner Freunde gesagt, dass ich brauchen könnte einen regulären Ausdruck verwenden, um alle diese Links zu erhalten, aber ich wollte zuerst ein Halten dieser Methode erhalten.

Bitte geben Sie mir einige Hinweise. Vielen Dank.

+0

versuchen, ein "Application.Wait Timeserial (Stunde (Now()), Minute (Now()), zweites (Now()) + 10)" nur hinzufügen, bevor Sie „internetdata = Internet .document "warten Sie 10 Sekunden vor Ihrem Set und prüfen Sie, ob es funktioniert. Wenn das Element in der Webseite existiert, ist es wahrscheinlich, dass Sie es nicht bekommen, weil die Webseite noch nicht richtig geladen wurde und Sie es nicht in Ihrem Dokument haben, wenn Sie versuchen, es zu kratzen –

+0

@ Matteo NNZ Ich versuchte Wartezeit too..still gibt es denselben Fehler. Ich weiß es nicht, aber ich habe das Gefühl, dass ich bei div_result booboo mache ... Vielleicht verstehe ich es nicht richtig ... Ich weiß einfach nicht warum. –

+0

'internetdata.getelementsbyclassname („categorySubNavigation“)' ist eine Sammlung von Tags ... gibt es nur einen so können Sie indizieren (kein Looping erforderlich). 'set div_result = internetdata.getElementsByClassName (" KategorieSubNavigation ") (0) .getElementsByClassName (" c4 seriesOptions ")' .... das gibt auch eine Sammlung zurück, also muss man 'div_result (0) ... div_result (1) ... etc' – jsotola

Antwort

1

GetElementsByTagName oder andere holen auf einzelne Elemente-Methoden arbeiten und nicht über eine Sammlung. Sie brauchen eine andere Schleife.


Sub urlCatch() 

    Dim url     As String 
    Dim internet   As Object 
    Dim internetdata 
    Dim div_result 
    Dim links 
    Dim itm 
    Dim itm2 



    Set internet = CreateObject("InternetExplorer.Application") 
    internet.Visible = True 

    url = "http://www.dell.com/vg/p/desktops.aspx?c=vg&cs=vgdhs1&l=en&s=dhs&~ck=mn" 
    internet.Navigate url 

    Do 
     DoEvents 
    Loop Until internet.ReadyState >= 4 And Not internet.busy 


    Set internetdata = internet.document.body 

    Set div_result = internetdata.getelementsbyclassname("c4 seriesOptions") 
    For Each itm In div_result 
     Set links = itm.getElementsByTagName("A") 
     For Each itm2 In links 
      Cells(Range("A" & Rows.Count).End(xlUp).Row + 1, 1) = itm2.href 
     Next 
    Next 


End Sub 
+0

@ cyboashu Danke, es funktioniert super. Ich verstehe die Logik. Obwohl ich Programmierer bin, finde ich diese Website sehr hilfreich. Kannst du mir bitte sagen, wo ich mehr Informationen über Web Scraping finden könnte, weil ich mir ziemlich sicher bin, dass ich auf viele Blöcke auf meinem Weg stolpere. Bitte erzähl mir ein paar Quellen, wo ich lernen könnte. Vielen Dank. –

+0

Sie können Tutorials online finden. Google ist der beste Ort für die Suche. :) Übrigens finde ich diesen Link ziemlich hilfreich .: https://msdn.microsoft.com/en-us/library/hh869680(v=vs.85).aspx – cyboashu

Verwandte Themen