VBAプログラム開発、スクレイピング・データ要素を充実させる【5】IDと画像をExcel一覧表に追加する
詳細ページのテキスト情報を収集できるようにしました。
残る情報としては、画像データがあります。一覧表示データの取得時に作成していたコードを基に詳細ページでも表示できるようにします。
同様に、一覧表示データ取得時にIDも表示していたので、今回も対応させます。
今回の目的
スクレイピング取得情報にIDと画像を追加する
なぜやるか
ワークシートに表示させたい不足情報に対応し、必要な全情報をマクロ実行のみで完結させるため
やりたいこと
- 画像を取得して表示させる
- ID番号を表示させる
やったこと
- データ表示場所を決定する
- 画像データを取得して表示させる
- ID番号を取得して表示させる
実施内容
不足情報を格納する場所を用意する
前回までに、詳細ページのテキストデータを取得できるようにしていました。
この表にIDと画像を追加表示できるようにしていきます。
表示させる場所を検討する
詳細ページ情報を取得する以前に一覧表示からデータ取得をするVBAを作成していた時に、IDと画像の取得処理は一度作成していました。
この時に処理は一度作成していたので、今回のコードに即した形に変更するだけで良さそうです。
ところで、Excel内では画像が右側に表示されています。
上記で取得している元データはWeb上の一覧表示でした。
Webの一覧表示では画像は左側にあります。詳細ページも同じく左側です。
デザインの観点からも画像が左にあるほうがバランスがいいようにみえるので、挿入位置は左側とします。
ワークシートデータの左側にIDと画像の枠を準備しました。
画像データを取得する
テキスト取得していたコードに画像処理を追加します。
# 詳細ページ取得コード[ループ]
'最初のページ
OpenPage = DWSheet.Cells(URLi, 1).Value
Do Until OpenPage = ""
objIE.navigate OpenPage
Call WaitResponse(objIE)
Set htmlDoc = objIE.document
j = 2
'画像取得処理
Set DocPicture = htmlDoc.getElementsByClassName("book-detail__picture")(0)
Set ImgURL = DocPicture.getElementsByTagName("img")(0)
Set actcell = SWSheet.Cells(i, j)
SWSheet.Shapes.AddPicture _
fileName:=ImgURL.src, _
LinkToFile:=True, _
SaveWithDocument:=True, _
Left:=actcell.Left, _
Top:=actcell.Top, _
Width:=100, _
Height:=100
j = j + 1
~ 以下テキスト処理実施 ~
Loop
あらかじめOpenPageには最初のURLを設定しておき、繰り返し処理を実施する形と書き換えました。
後は、ワークシートの左側からデータ処理をするので画像を先に処理してからテキストデータを処理する形にしています。
※IDは後ほど追加します。
画像データはHTMLの参照元を確認できれば、処理自体は以前作成したものがほぼ流用できるので、それを利用しました。
確認用に1件だけ出力しましたが、左側に画像が出力され、続きにテキストデータが出力されました。
ID番号を表示する
残るはID表示です。
一覧表示データを取得していた時にコードは作成していました。取得した詳細ページURLのアドレスを"/"で分割して、一番右側にくるのがID番号に相当していました。
こちらのコードを追加してやることで、ID番号を取得します。
# 詳細ページ取得コード[ループ]
Do Until OpenPage = ""
objIE.navigate OpenPage
Call WaitResponse(objIE)
Set htmlDoc = objIE.document
j = 1
'1列目にID番号
GetUrl = OpenPage 'URL取得
GetUrlData = Split(GetUrl, "/") 'URL要素取得
GetUrlElement = UBound(GetUrlData) 'URL要素確認
GetID = GetUrlData(GetUrlElement) 'URLから番号取得
SWSheet.Cells(i, j).Value = GetID
j = j + 1
~ 以降、画像とテキスト処理実施 ~
Loop
詳細ページURLはOpenPageに格納されているので、この中からID番号を抜き出します。処理自体は一覧表示からスクレイピングしていた時に作成していたので、出力セルさえ修正すればそのまま使えます。
これを画像処理前に追加しました。
ID番号が表示されました。
これで詳細ページを参照して一連のデータを取得して表示する。といった内容の処理ができるようになりました。
すべてのデータを取得できるようになりましたが、ひとつ課題として残っていた処理があるので、次回対応します。