2017-08-22 8 views
0

this linkのすべてのhrefリンクを削り取ろうとしています。VBA:HTML文書のネストされた要素の検索

私は、ページ上の製品のリンクを取得するには、次のコードを使用しています:私はdiv_reultでエラーを取得しています

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 

:「オブジェクトはこのプロパティまたはメソッドをサポートしていません」。

私は何かを取得するために要素を使用しているのは初めてです。だから、私が現在気づいていない間違いをしているかもしれません。

私のコードを見て、私がここで何をしているのかを教えてください。

私はこれらのリンクをすべて取得するために正規表現を使用する必要があるかもしれないと私の友人の一人から聞いてきましたが、この方法を最初に保留したいと考えていました。

いくつかのガイダンスを教えてください。ありがとう。

+0

追加するようにしてください "(10 +)時間(NOW())、分(NOW())、第二(NOW())Application.Wait TimeSerialない" をinternetdata =インターネット設定するだけ」の前に.document "をセットの10秒前に待ち、それが動作するかどうか確認してください。要素がWebページに存在する場合は、Webページが正しく読み込まれなかったために取得できない可能性があります。文書を取り残そうとしたときに文書にその要素がないためです。 –

+0

@ Matteo NNZ待ち時間まだ同じエラーが出ています。私は知りませんが、私はdiv_resultにboobooを作っていると感じています...たぶん私はそれを正しくしていない...私はちょうどなぜ知りません。 –

+0

'internetdata.getelementsbyclassname(" categorySubNavigation ")'はタグのコレクションです。インデックスを作成できるのは1つだけです(ループは必要ありません)。 'set div_result = internetdata.getElementsByClassName(" categorySubNavigation ")(0).getElementsByClassName(" c4 seriesOptions ")' ....これもコレクションを返すので、 'div_result(0)... div_result 1)... etc' – jsotola

答えて

1

GetElementsByTagNameまたは他のフェッチメソッドは、単一の要素で動作し、コレクションでは動作しません。別のループが必要です。


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ありがとう、それは素晴らしい作品です。私はその論理を理解している。私はプログラマーを独学で教えていますが、このウェブサイトは非常に役立ちます。私はあなたが私の道のりで多くのブロックにつまずくだろうと確信しているので、私がウェブスクレーピングについてのより多くの情報を見つけることができる場所を教えてください。私が知ることのできる情報源を教えてください。ありがとう。 –

+0

オンラインでチュートリアルを見つけることができます。 Googleが検索するのに最適な場所です。 :)ところで、私はこのリンクが非常に役に立つと思う。https://msdn.microsoft.com/en-us/library/hh869680(v=vs.85).aspx – cyboashu

関連する問題