2017-01-09 19 views
2

私はウェブサイトからいくつかの情報をスクラップするためにExcelを使用しようとしています。別のフィールドとしてWebサイトからデータを抽出してください

これは、ソースの上に表示するものである:

<tr class="even"> 
    <td align="right">1</td> 
    <td><a href="/kld/en/1.html">Acrobatic Maneuver</a></td> 
    <td>Instant</td> 
    <td>2W</td> 
    <td>Common</td> 
    <td>Winona Nelson</td> 
    <td><img src="http://magiccards.info/images/en.gif" alt="English" width="16" height="11" class="flag2"> Kaladesh</td> 
    </tr> 

だから私も持っているすべてを取得し、<td></td>

の間でデータを抽出したいしかし、私が今まで見つけたすべてがこれですコード

Sub getcards() 
    Dim IE As Object 
    Dim i As Long 
    Dim objCollection As Object 

    ' Create InternetExplorer Object 
    Set IE = CreateObject("InternetExplorer.Application") 

    ' You can uncoment Next line To see form results 
    IE.Visible = False 

    ' URL to get data from 
    IE.Navigate "http://magiccards.info/query?q=%2B%2Be%3Akld/en&v=list&s=issue" 

    ' Statusbar 
    Application.StatusBar = "Loading, Please wait..." 

    ' Wait while IE loading... 
    Do While IE.Busy 
     DoEvents 
     Application.Wait DateAdd("s", 1, Now) 
    Loop 
    On Error GoTo abort 
    Application.StatusBar = "Searching for value. Please wait..." 
    Dim dd As String 
    Set objCollection = IE.document.getElementsByClassName("even") 
    For i = 0 To objCollection.Length 

    dd = IE.document.getElementsByClassName("even")(i).innerText 

    MsgBox dd 
    Next i 
abort: 
    ' Show IE 
    IE.Visible = True 
    IE.Quit 

    ' Clean up 
    Set IE = Nothing 

    Application.StatusBar = "" 
End Sub 

それがデータを抽出するような方法で動作しますが、出力はすべて一緒1Acrobatic ManeuverInstant2WCommonWinona Nelson Kaladeshです。

どうすれば個々のフィールドとして<td>を理解できるのですか?簡単に抽出できますか?

+0

'IE.document.getElementsByClassName( "偶数")は、(i).getElementsByTagName( "TD")(x)'はあなたがxがあるコレクションをループする必要があると思いますアイテム。 –

+0

'IE.document.getElementsByClassName(" even ")(i).getElementsByTagName(" td ")(1)'を使って試しましたが、返されたのは '' [object HTMLTableDataCellElement] ' – Moacir

+0

だったので、.innerTextを追加してください:) –

答えて

4

iの中でobjCollectionにループしているときは、実際には、希望する特定の要素の中の要素ではなく、「even」のClassNameですべての要素をループしています。

これを試してみてください:

For i = 0 To objCollection.Length - 1 
    For c = 0 to IE.document.getElementsByClassName("even")(i).getElementsByTagName("td").Length - 1 
     dd = IE.document.getElementsByClassName("even")(i).getElementsByTagName("td")(c).innerText 
     MsgBox dd 
    Next c 
Next i 
+1

最後の値を取得しようとするとクラッシュしたので、 'for c = 0 ...'の最後に '-1'を追加して完全に動作しました。ありがとう! – Moacir

+0

ああ、申し訳ありませんが、 'Length'関数は要素を数えますが、私たちはインデックスをループしていますので、常に1つ少なくなります - これを答えに追加して他の人を助けます。 – Jordan

関連する問題