2016-05-26 4 views
0

私はこの問題の可能性のある回避策を探していました。VBAの特定のスタイルのためにウェブスクレープを適用できますか?

私の会社のすべてのデータには、静的なHTMLページを生成するWebポータルからアクセスします。残念ながら私たちの部署にはサーバーへの直接アクセス権が与えられないため、私の人生が楽になるので、必要なデータを見つけるためにこのポータルをページする必要があります。私のナビゲーションはうまくいきますし、要素の名前を付けたり、IDを与えたりすることでかなり熟練していますが、これはどちらもありません。

とにかく、途中でバックグラウンド。

私は独特のスタイルを持っているページからテーブルをつかむしたい「空のセル:ショー;」:

<TABLE cellspacing=10 cellPadding=10 border="1" style="empty-cells: show;"> 

</TABLE> 

か、常に含まれている最初の行の見出しがあることが失敗同じテキスト文字列。私はそのテーブルを取得すると、必要なデータを操作できます。ここでは非常に機密性の高いデータですので、残念ながら全面的なコードを提供することはできません。

GetElementByRegexに関して多くの投稿がありましたが、実際に使用方法を説明している投稿やウェブサイトを見つけることができません。代わりに、彼らはすべて私がオプションではないアドオンをインストールしたい(私は知識のために私の渇きを感じるためにこれを学ぶ必要がある)。そのレンチェックを使用すると、私はトップTDタグを取捨選択する助けにはなりませんけれども

<TABLE cellspacing=10 cellPadding=10 border="0" width=100%> 

<tr> 

<td> 
    <TABLE cellspacing=10 cellPadding=10 border="1" style="empty-cells: show;"> 

       <TR class="row0"> 
       <TD style="width: 25%; background-color: #A3DCF5;"><strong>TITLE:</strong></TD> 
       <TD>LINE1</TD> 
       </TR> 
       <TR class="row1"> 
        <TD>&nbsp;</TD><td>LINE2</td> 
       </TR> 
       <TR class="row0"> 
        <TD>&nbsp;</TD><td>LINE3</td> 
       </TR> 
       <TR class="row1"> 
        <TD>&nbsp;</TD><td>LINE4</td> 
       </TR> 
       <TR class="row0"> 
        <TD>&nbsp;</TD><td>LINE5</td> 
       </TR> 

    </TABLE> 
</td> 

</tr> 

</TABLE> 

他の多くのテーブルがあります:私は、機密データを削除する以下のテーブル全体のコードを追加している支援するため

ありがとうございました。ティム!

以下の私のために完璧に働いた:

Dim tbls, tbl 
Dim L1, L2, L3, L4, L5 As String 

Set tbls = IE.Document.getElementsByTagName("table") 

For Each tbl In tbls 
    If tbl.Rows(0).Cells(0).innerText = "Card Address:" Then 

     On Error Resume Next 
     L1 = tbl.Rows(0).Cells(1).innerText 
     L2 = tbl.Rows(1).Cells(1).innerText 
     L3 = tbl.Rows(2).Cells(1).innerText 
     L4 = tbl.Rows(3).Cells(1).innerText 
     L5 = tbl.Rows(4).Cells(1).innerText 

     Exit For 
    End If 
Next 

Worksheets("Sheet2").Range("A1").Value = L1 
Worksheets("Sheet2").Range("A2").Value = L2 
Worksheets("Sheet2").Range("A3").Value = L3 
Worksheets("Sheet2").Range("A4").Value = L4 
Worksheets("Sheet2").Range("A5").Value = L5 

End Sub 
+0

私は一度似たような(おそらく)を持っていたし、私が試行錯誤の多くを行うと( 'td'タグを使用して)テーブルの収集トラフループ私が望んでいた行の量でテーブルを返しました(それは私が正しいテーブルを持っていることを知っていたときです)、次に行とカラムの値を取得するためにテストしました。 sytnaxは 'td.Rows(0).Cells(1).InnerText'となると思います。 [このリンク](http://stackoverflow.com/questions/26792344/loop-through-td-element-in-html-document-from-inside-frame-vba-excel-ie8-automat)は完全ではありませんが、しかしそれはあなたにスタートを与えるでしょう。 –

+0

ありがとう、私はこれを見て、私はそれを動作させることができます参照してください。 –

答えて

1
Dim tbls, tbl, tr, j, td, row, sht 

Set tbls = IE.document.getElementsByTagName("table") 

For Each tbl in tbls 
    'item indexes are zero-based (AFAIR) 
    If tbl.Rows(0).Cells(1).innerText = "LINE1" Then 


     'EDIT: extracting the table contents 
     Set sht = ActiveSheet 
     row = 3 
     For Each tr In t.getelementsbytagname("TR") 
      j = 1 
      For Each td In tr.getelementsbytagname("TD") 
       sht.Cells(row + 1, j).Value = td.innerText 
       j = j + 1 
      Next 
      row = row + 1 
     Next 

     Exit For 'stop looping 
    End If 
Next 
+0

ありがとう、今日は銀行休日の週末のために非常に忙しかったですが、私は明日これを見ていきます。 –

+0

これはテーブルを見つけるために働いていますので、本当に助けてくれてありがとうございます。実際のテーブルデータをコピーするにはどうすればいいですか? –

+0

元気に編集していただき、ありがとうございました。あなたは星です、元気です。 –

関連する問題