2016-05-15 19 views
1

私はしばらく前に、HTMLページを読み込んで、自分のゲームコレクションの価格に関する特定の情報を抽出できるプログラムをExcel VBAで書きました。それは一ヶ月前までうまくいっていて、すべてがうまく機能しなくなりました。なぜそれがもううまくいかないのか分からず、解決するためには何か助けが必要です。VBAでHTMLページからID /クラス情報を抽出

ので、ここでは、ここでコード

Dim htm As Object   ' tableau HTML venant du site pricecharting 
    ' Find price over internet 
    With CreateObject("msxml2.xmlhttp") 
     .Open "GET", "http://videogames.pricecharting.com/game/" & console & "/" & name & "", False 
     .Send 
     htm.body.innerhtml = .responsetext 
    End With 

    ' what I want is in a table row 1 and cell 0 (used price) 
    Cells(ligne + 1, 3).Value = htm.getelementbyid("price_data").Rows(1).Cells(0).innerText 

とは、 "コンソール" はマリオ・カート-64による任天堂-64と "名前" に置き換えられている例のページです:

https://www.pricecharting.com/game/nintendo-64/mario-kart-64

<div id="price_data" class="info_box"> 
     <div id="used_price"> 
      <h3>Loose <span>Price</span></h3> 
      <p class="price"> 
     $44.60 
      </p> 
      <p class="js-show-tab volume" data-show-tab="completed-auctions-used"> 
    <span class="tablet-portrait-hidden">Volume:&nbsp;</span> 
    <a href="#">3 sales per day</a> 
</p> 
     </div> 

     <div id="complete_price"> 
      <h3>Complete <span>Price</span></h3> 
      <p class="price"> 
     $65.99 
      </p> 
      <p class="js-show-tab volume" data-show-tab="completed-auctions-cib"> 
    <span class="tablet-portrait-hidden">Volume:&nbsp;</span> 
    <a href="#">2 sales per week</a> 
</p> 
     </div> 

     <div id="new_price"> 
      <h3>New <span>Price</span></h3> 
      <p class="price"> 


     $178.14 


      </p> 
      <p class="js-show-tab volume" data-show-tab="completed-auctions-new"> 
    <span class="tablet-portrait-hidden">Volume:&nbsp;</span> 
    <a href="#">2 sales per month</a> 
</p> 
     </div> 
</div> 

$ 44.60の価格を引き出していましたが、私が言ったようにもう動作しませんでした。エラー '-2147024891(80070005)'が表示されました。アクセスが拒否されました。

誰かが私を助けることができますか?私はこれで全く新しいので、私が見つけた情報のほとんどは私が理解するにはあまりにも複雑です。

答えて

0

現在、htmオブジェクトは、innerhtmlテキストを書き込もうとするとコードが初期化されません。可能であれば、投稿にすべてのコードが表示されていない可能性があります。 responsetextを保持し、HTMLオブジェクトの検索を実行するためにHTMLFileの使用を検討してください:

Public Sub WebScrape() 
    Dim htm As Object, doc As Object 

    Set htm = CreateObject("MSXML2.XMLHTTP") 
    Set doc = CreateObject("HTMLFile") 

    With htm 
     .Open "GET", "http://videogames.pricecharting.com/game/" _ 
         & console & "/" & Name & "", False 
     .Send 
     doc.Open 
     doc.write .responsetext 
     doc.Close 
    End With 

    Cells(ligne + 1, 3).Value = doc.getelementbyid("price_data").Rows(1).Cells(0).innerText 

    Set doc = Nothing 
    Set htm = Nothing 

End Sub 
+0

これは情報を抽出するために使用するすべてのコードです私は欲しい。私はあなたの解決策を試みましたが、うまくいかず、プログラムは ".send"コマンドで停止し、エラーメッセージを表示します。可能な更新で、「パッケージ」MSXML2.XMLHTTPが、私が望むタスクを実行するために再構成されたことがブロックされている可能性がありますか? –

0

最後に、私は私の問題を解決しました!

' Search price over internet 
    With CreateObject("WINHTTP.WinHTTPRequest.5.1") 
     .Open "GET", "http://videogames.pricecharting.com/game/" & console & "/" & name & "", False 
     .Send 
     htm.body.innerhtml = .responsetext 
    End With 

    ' Search the price with the state of the game (completed ou cartridge only) 
    If consoleandname(3) <> "Completed set" Then 

     ' the information we search is found with ID used_price 
     Cells(ligne + 1, 3).Value = htm.getelementbyid("used_price").innertext 

    ElseIf consoleandname(3) = "Completed set" Then 

     ' the information we search is found with ID completed_price 
     Cells(ligne + 1, 3).Value = htm.getelementbyid("complete_price").innertext 
    End If 

ので、代わりのMSXML2.XMLHTTPを使用して、私は今WINHTTP.WinHTTPRequest.5.1を使用します(しかし、私は違いが何であるかはかなりよく分かりません)。私は、HTMLコードが変更されたことを知ります。命令で再び動作させるために初めて成功したからです。 セル(ligne + 1,3).Value = htm.getelementbyid( "price_data")。getElementsByTagName( "p ")(0).innertext

しかし、その翌日、その解決策はもう機能していなかったので、私は以前の現在のショーを試してみました。 HTMLコードを見て私はそれが違っていることに気付いたので、私の元のコードが機能しなくなり、WINHTTP.WinHTTPRequest.5.1のために変更する必要がある理由がmaybyです

関連する問題