はに丸SD 調査部

あれこれ調べたり考えたりしたことどもを綴っております

VBAでスクレイピング

これまで Excel 2013 のvbaスクレイピングをしていたが、2019に変えたタイミングで、yahooファイナンスのウエブページの取得がうまくいかなくなった。

変数内の要素数などを各行で調べたところ、意外なことにウエブから文字列を取得する部分は問題ないが、文字列をHTMLdocument に書き込むところで滑っていることが分かった。

 

htmlDoc.write(htmlstr)  'htmlstr のワード数は 97000-99000ぐらい

Debug.print htmlDoc.all.length  '直後 要素が29

sleep 1000

Debug.print htmlDoc.all.length ' sleep とか doevents をループした後

 

不思議なことだが、何もしないで次の行に移ると、HTMLdocument には

29の要素しかなく、ブレークポイントを入れる/ステップインで実行する/sleep

したり、length が 短い場合 適当な回数 doevents をループしたりすると

ようやく HTMLdocument にパースに成功したと思われる1100ぐらいの要素が確認できた。

C#などで HTMLdocument.write (string) メソッドを使う場合はしっかりしているのかもしれないが。vba の方はそうでもないんじゃなかろうか。しばらく前まで、 getElementByClassName メソッドも名前だけあって使えなったし

もちろん自分の書き方とか環境だけで発生している問題かも