caitsith's note

人は些末な事は忘れてしまうので、分かりやすい形に整理して記録したい

Amazonの購入したKindle書籍をリストにしてみる

ふと気付いたら、Kindleで購入した書籍がほとんどダウンロード出来なくなっていました。
ググってみたら、操作を誤ってライブラリから削除してしまったみたい… 削除してしまった本の復旧はカスタマーサービスに連絡して戻してもらうらしい。

だけど、復旧してもらった結果が正しいか分からない、そこで購入した書籍のリストが欲しいなと思いました。

ウェブから情報を得るならスクレイピングが役に立つ

そう思って、昔勉強した「Excel VBAIEを思いのままに操作できるプログラミング術」の書籍を参照しながら作業をしようと思ったら… それも消えていました。面倒い…

とりあえず概要は覚えているので、ググってブラウザの起動とHTMLドキュメントの取得までを作成。

昔仕事でXMLを読み書きするVBAスクリプトを作ったことが有ったので、その時と同じくXPathを使って操作しようと思いAmazonの購入履歴を「Kindle」で絞って見てみたら…
HTMLは書式が自由過ぎてXPathでアクセスするのは面倒くさいことが分かる。

そこで方針変更、ID、class、tagを使ってアクセスすることにした。

自動操作系は面倒なのでパス

取り合えず、自動ログインとかページを次に進めるとかは、ボタンに見えたものがspanタグで作られていてクリックする方法を調べたら面倒くさそうなのでパス。

手動でページを開いて表示されている購入履歴を読み込んで、EXCELのセルに代入するだけのものを作る。

取得してみたら書籍名以外にも同じclass名を使っていて、ゴミ情報も拾ってきたのでIF文で排除、取り急ぎリストの作成が出来ました。  

Dim strBookName As Object
Dim intRow As Integer

intRow = 1
While 1
    For Each strBookName In htmlDoc.getElementsByClassName("a-link-normal")
        If strBookName.innerText <> " " And strBookName.innerText <> "注文の詳細" Then
            'Debug.Print strBookName.innerText
            Worksheets("Sheet1").Select
            Cells(intRow, 1) = strBookName.innerText
            intRow = intRow + 1
        End If
        DoEvents
    Next
    DoEvents
Wend