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 メソッドも名前だけあって使えなったし
もちろん自分の書き方とか環境だけで発生している問題かも