2016-03-21 12 views
0

現在、ワークシートとVBAのコマンドボタンを使用して、ボタンのクリック時に公式のスポーツサイトからプレーヤーの統計データをワークシートにインポートしようとしています。私がコピーしようとしているデータは21以上の異なるウェブページです。VBAの複数のWebページからのデータのインポート

次のようにWebページのURLの形式は次のとおりです。URLの最後の数字は、あなたが見ているどのデータシートを示すために、1と21の間で変化し http://www.afl.com.au/stats/player-ratings/overall-standings#page/1

私のコードについては、以下を参照してください:

Sub Button1_Click() 

    Const WebAddress As String = "http://www.afl.com.au/stats/player-ratings/_ 
    overall-standings#page/" 

    Dim qt As QueryTable 
    Dim PlayerRatings As Worksheet 
    Dim PageNumber As Integer 
    Dim RowPasteNumber As Integer 

    RowPasteNumber = 6 
    Set PlayerRatings = ActiveSheet 

    For PageNumber = 1 To 21 

     Set qt = PlayerRatings.QueryTables.Add(Connection:="URL;" & WebAddress & PageNumber,_ 
     Destination:=Range("A" & RowPasteNumber)) 
     qt.Refresh BackgroundQuery:=False 
     RowPasteNumber = RowPasteNumber + 41 

    Next PageNumber 

End Sub 

だから私の考えは、私は、データが、その後に位置して別のWebページを巡回するページ番号の整数を毎回インクリメントループに使用することができるはずでしたそのWebページからデータをコピーし、ワークシートの前のデータの41行下に貼り付けます。

私は、FORループが21回の反復を完了し、以前のデータよりも41行下のデータをペーストするたびに(必要に応じて)データをコピーし続けますウェブページ1を何度も何度も繰り返します。

なぜ誰かが私のコードがこれを行うかもしれないと見ることができますか?

ご協力いただき誠にありがとうございます。

スティーブンス

答えて

0

私は最近、ウェブスクレイピング中に同様の問題に遭遇しました。

問題は、アドレスにロケーションハッシュ#が含まれていることです。 #以降のものは、サーバーによって決して処理されません。

違ったURIの残りの部分よりもフラグメント識別子機能:つまり、その別のstackoverflowの答え(Why the hash part of the URL is not in the server side?

の一部を繰り返す

はここWikipediaがそれについて言っているのです処理はサーバからの参加なしののみがクライアント側です。エージェント(Webブラウザなど)がWebサーバーにリソースを要求すると、エージェントはURIをサーバーに送信しますが、フラグメントは送信しません。代わりに、エージェントはサーバーがリソースを送信するのを待ってから、エージェントはフラグメント値に従ってリソースを処理します。最も一般的なケースでは、エージェントは、Webページを、フラグメント値に等しい属性文字列を持つアンカー要素までスクロールします。他のクライアントの動作が


可能であり、これを回避する最も簡単な方法は、それぞれが移動した後、直接IEのオブジェクトを自動化し、document.body.innerHTMLのコピーを取得すること、および/またはアクションをクリックします。出発点としては、ここをクリックしてください:http://www.excely.com/excel-vba/ie-automation.shtml

+0

乾杯する。 これは私がVBAで初めて行ったので、その綿密なリンクを見て、私が思いつくものを見てみましょう。助けてくれてありがとう! – Stephen

関連する問題