(VBA)ヤフオクの検索結果をEXCELに書き出すスクレイピング

YAHOO AUCTIONをよく利用します。そのためScript A Weekの第一弾の成果物としてYAHOO AUCTIONをスクレイピングするプログラムを書いてみました。
良く知られたシステムで「出品者が出品した商品に対して、複数の落札者が商品の値段を競い、最も高い人が落札する」というシステムです。
複数の落札者が商品の値段を競うという点がポイントで、落札者が争う事で市場価格よりも高い価格で落札されるケースもあれば、価値に気づかれずに市場価格以下にしかならない場合と価格にばらつきが出やすいシステムになっています。
ここでは目的に関わらず、市場価格よりも安くヤフオクを使って入手するために必要なポイントを記載しておきます。

ヤフオクで行う定常作業について

ヤフオクで見ている点

ヤフオクで見ることの多い軸は「価格帯」、「入札数」、「締切までの時間」この3点です。気に入った商品があった場合はここを調べると捗ると思います。

価格帯

「価格帯」は予算の一応の考え方として入れているものです。欲しいものが具体的に決まっている場合は入れる必要のない項目と言えると思います。

入札数

入札数はスクリーニングに使っています。YAHOO AUCTIONには本当に役に立たないものについても売られているケースがあるため、入札数がゼロのものには手を出さないようにしています。
価値のあるものを見つける楽しみもあると思いますが、数が少ないと思われるため、私は一定の入札数があるものを対象として入手しています。

締切までの時間

時間で締め切っているため、最後の価格のみが意味のある情報です。従って、締め切りまでの時間は1日にしておき、毎日同じ時間にチェックしておけば漏れる心配はないと思います。

VBAにて実装

今回のプログラムで勉強になった点やポイントを書き残しておきたいと思います。(2017年10月13日現在)
またページは入札数で数が減っていくソートをかけておく。

1ページにそれぞれの項目は20個なので"i=0 to 19"にセットしておいた。下記のセルは例です。連続処理してください。

タグの拾い方

欲しい情報は「URL」、「商品題名」、「現在価格」、「即決価格」、「入札数」、「落札期限」です。それぞれセルに記入していきましょう。

URL

h3タグの一つ下のタグの中にhref属性があるので、そこを拾う。

Cells(1, "A").Value = objIE.document.getElementsByTagName("h3")(i).Children(0).href
商品題名

h3タグそのもののテキストデータを拾う。

Cells(1, "B").Value = objIE.document.getElementsByTagName("h3")(i).innerText
現在価格

ちょっと難しかった。pr1のクラス名で引っ張り、"円"をキーに数値を抜き出す事が出来た。

Cells(1, "C").Value = Mid(objIE.document.getElementsByClassName("pr1")(i).innerText, 1, InStr(objIE.document.getElementsByClassName("pr1")(i).innerText, "円"))
即決価格

pr2のクラス名で抜き出す。

Cells(1, "D").Value = objIE.document.getElementsByClassName("pr2")(i).innerText
入札件数

biのクラス名で抜き出す。

Cells(1, "E").Value = objIE.document.getElementsByClassName("bi")(i).innerText
入札期限

tiのクラス名で抜き出す。

Cells(maxrow + i + 1, "F").Value = objIE.document.getElementsByClassName("ti")(i).innerText

感想

データを抜く方法に加工を加えるよりはエクセルに落とした後に加工する方が楽だと思います。
それにしてもVBAでIEからデータをエクセルに書き込むと時間がかかったりうまく動作しなかったりすることがあり、ちょっとストレスですね。
テキストデータ等で扱った方がよいのかもしれません。