ExcelのVBAでスクレイピング
久しぶりのEXCELです。
今回はAmazonの売れ筋ランキングデータをEXCELのシートへ自動で並べてみました。
切っ掛けは
- Blogをもう少し充実させたい!
- ネタが欲しいっ!
という事で、普段は世間の流れを一切気にしていないのですが、情報収集のためにやってみたいと思います。
知識としてEXCELのVBAはもちろん必要なのですが、Htmlの知識も必要になります。ちょうどHtml、CSS、JavaScriptをやり始めていますので、良い機会でもあります。
仕様
amazonの売れ筋ランキング1位から100位の順位、商品名、星の数、評価数、金額を自動でシートへ貼り付けます。
売れ筋ランキングにはカテゴリーがあり、カテゴリー別にデータを引っ張ります。
ただ、すべてのカテゴリーとなるととてつもないデータになりますので、取り敢えずカテゴリー直下の項目を予めシートに登録し集計するようにしました。
カテゴリーのURLが必要になりますが、Chromeの検証からカテゴリーのelementをコピペし編集します。
(実はこの方法は後で気付いたので実際はクリック・コピー・貼り付けの繰り返しで時間がかかりました。)
sheet1にデータを張り付けるsheet名とカテゴリー名・そのURLをセットしておきます。
カテゴリーは35項目ありました。
カテゴリー分シートを追加して置きカテゴリー別にシートを分けてデータを張り付けれるようにしておきます。
あとはExcelのVBAでプログラミングするのですが、こちらのサイトを参考にさせて頂きました。
とても分かりやすく丁寧に説明が加えられています。
しかしチョッと思うように動きませんでした。
1位から50位までは問題なく、51位から100位までがきちっと貼り付けできません。
あと、商品によっては金額が2つあったり、金額が無いものもあり、その場合はきれいに並べる事が出来ません。そこで次のサイトを参考に手を加えました。というか流れが全く違うものになりました。
元々参考にしたプログラムは、ページ内のデータを項目ごとに1位から50位まで取り込む作りだったので、先述の問題が解決出来ません。
そこで、商品毎に取り込むよう変更しました。
すると、金額が複数ある場合も取り込むことが出来るようになりました。
星の数、評価数もここで追加しました。
課題点
- カテゴリーごとに新たなブラウザを開くので時間がかかっている
- カテゴリー別にBookを分け、集計データを蓄積できるように変更
- 蓄積したデータの分析を自動化
など改良したいと思います。
結果
1カテゴリーの1位から100位までのデータを4.5秒で取得する事ができました。
ランキングデータを並べるだけでは意味がないので定期的にデータを取得し、現在売れている商品の紹介や流行りそうなものの先取りなんかがグラフを使ってご紹介出来ればと思います。
いつ出来上がるかは分かりません・・・