自分方位研究所

日々の活動記録

(Excel VBAでのIE制御) はてなブログ 「記事の管理」ページ の記事一覧。getElementsByTagNameメソッドを使って抜き出していきたいが・・・

はてなブログ 「記事の管理」ページのソースコードを調べて、どのタグを拾えば良いかがわかりましたので、次は、実際にExcel VBAを使ってコードを書いていきます。

いつものように、要点だけ記載したコードで、このままでは走らないので申し訳ありません。

Dim objTag_tr As Object '<tr>
Dim objClas_tr_hover As Object
Dim obj1Article As Object    '1記事分のhtmlコード

Do
    For Each objTag_tr In objIE.document.getElementsByTagName("tr")
        For Each objClas_tr_hover In objTag_tr.document.getElementsByClassName("tr-hover ")
            If InStr(objClas_tr_hover.innerHTML, "年") > 0 Then
                Set obj1Article = objClas_tr_hover
                Debug.Print obj1Article.outerHTML
            End If
        Next objClas_tr_hover
    Next objTag_tr
Loop

Doループに入って最初のFor Eachで 「getElementsByTagName("tr"」で、<tr>タグをつかまえて、その次の For Eachで 「.getElementsByClassName("tr-hover ")」で、class="tr-hover "  かどうかを検査し、さらに その<tr>タグの中、全体で「年」という文字があるかどうかを調べています。

この「年」という文字は、投稿日時を表示するときに入っている文字です。

data-local="">?2020?年?6?月?4?日? ?22?:?00?:?08</time>

ソースコードの最初の方の、差し込みタグ群には、この漢字が使われていないので、実際の記事であることの印として利用しました。

ここまで確認して、最後に Debug.Print obj1Article.outerHTML にて、ソースコードを表示すると、

<tr class="tr-hover "> 
~ 1記事分のHTML ~
</tr>

として、<tr>タグに囲まれた、1記事分のコードが出力されました。

 --------------------------------------------------

 次に各記事の情報を抜き取ろうとして、先ず、<a>タグから見ていこうと次のコードを実行してみました。

Dim i As Integer
Dim objTag_a As Object
For Each objTag_a In obj1Article.document.getElementsByTagName("a")  
    i = i + 1
    Debug.Print "***** " & i & " *****"
    Debug.Print objTag_a.outerHTML
Next objTag_a

自分の考えでは、オブジェクト「obj1Article」の中だけ[下図(2)]で<a>タグを表示していくものと思っていましたが、結果は「記事の管理」ページ全体[下図(1)]を調べていて、ページ全体の最初の方の<a>タグから出力されていました。
↓(1)===========================
 objIE (「記事の管理」ページ全体)

  ↓(2)---------------------------------------------
   obj1Article (tr)

    <tr class="tr-hover ">
     ~ 1記事分のHTML ~
    </tr>

  ↑(2)--------------------------------------------- 

↑(1)============================

<tr class="tr-hover "> ~ </tr> に囲まれた範囲だけのタグを扱うというやり方がわかりません。なので、各記事の情報抜き取りは、「getElementsByTagName」を利用していこうという計画でしたが、1記事分のHTMLをExcelシートに貼りつけ、各セルの文字列から情報を抜き出すという方向でいくことにします。

明日に続きます。

--------------------------------------------------

★2020/6/21追記★

本記事では「.getElementsByClassName("tr-hover ")」を使用して記事部分を取得すると書きましたが、1記事目はこのやり方で記事が取得できますが、2記事目以降が取得できません。(1記事目を何度も取得してしまいます)

ということで、修正版を投稿しました。

www.mypath-as-variant.com