6月13日の記事で、 はてなブログのダッシュボード、記事の管理ページでの記事一覧から、1記事分を抜き出すやり方を修正しました。
前回での1記事分の取り方やり方は 「getElementsByTagName("tr") 」でTRタグをつかまえたあとに、getElementsByClassName("tr-hover ")
を捜して、さらに 「年」という字を捜して・・・とやっておりましたが
このやり方では、同一記事の範囲を何度も繰り返して取得してしまい、次の記事範囲が取れない状態になっていました。
このときのコードを紹介していた記事です。↓
これを以下のように変更しました。
「getElementsByTagName("tr")」で TRタグをつかまえるのは、以前と同じですが、
その次に 「<td class="td-entry-title"」という文字列を捜して、これが存在すれば記事情報であるということを確定します。
要点のみのコードで、このままでは実行できず申し訳ありません。
--------------------------------------------------
ご参考までに、For Each~~ 「getElementsByTagName("tr")」で取得したOuterHTMLをExcelシートに貼りつけた状態をお見せします。5つめの<TR>から記事情報が出てきます。
先ず1つ目のTRタグ。カテゴリ一覧が入っています。
1 | <tr> |
2 | <th><label for="label-admin-entries-category">カテゴリー </label></th> |
3 | <td> |
4 | <select name="category" class="entry-search-input js-categories-selector" id="label-admin-entries-category"> |
5 | <option value="">カテゴリー指定なし</option> |
6 | <option value="日記">日記</option> <option value="読書">読書</option> <option value="雑文">雑文</option> <option value="旅行">旅行</option> <option value="Windows">Windows</option> <option value="HUAWEI P9 lite">HUAWEI P9 lite</option> <option value="ブログ運営">ブログ運営</option> <option value="健康">健康</option> <option value="mineo">mineo</option> <option value="片づけ">片づけ</option> <option value="生活">生活</option> <option value="メモ帳ノート">メモ帳ノート</option> <option value="Excel VBA">Excel VBA</option> <option value="過去記事のメンテナンス通知"> 過去記事のメンテナンス通知</option> <option value="退職">退職</option> <option value="ジムニー">ジムニー</option> <option value="Amazon">Amazon</option> <option value="工作">工作</option> <option value="PC整備">PC整備</option> <option value="自転車">自転車</option> <option value="映画">映画</option> <option value="格安SIM">格安SIM</option> <option value="@nifty">@nifty</option> <option value="英語学習">英語学習</option> <option value="200kbps制限">200kbps制限</option> <option value="アプリ">アプリ</option> <option value="NTTフレッツ">NTTフレッツ</option> <option value="IPHONE">IPHONE</option> <option value="ラジオ">ラジオ</option> <option value="独自ドメイン">独自ドメイン</option> <option value="Android">Android</option> <option value="スマホ">スマホ</option> <option value="LaLaCall">LaLaCall</option> <option value="LINE">LINE</option> <option value="Fire HD 8 タブレット"> Fire HD 8 タブレット</option> <option value="HUAWEI MediaPad T2 8.0 PRO"> HUAWEI MediaPad T2 8.0 PRO</option> <option value="金融">金融</option> <option value="Apple">Apple</option> <option value="@niftyでんき">@niftyでんき</option> <option value="時間">時間</option> <option value="インターリンク">インターリンク</option> <option value="アニメ">アニメ</option> <option value="メルカリ">メルカリ</option> <option value="Excel">Excel</option> <option value="BLUETOOTH">BLUETOOTH</option> <option value="メール">メール</option></select> |
7 | </td> |
8 | </tr> |
--------------------------------------------------
2つめの<TR>
1 | <tr> |
2 | <th><label for="label-admin-entries-hatenaid"> 作成者</label></th> |
3 | <td> |
4 | <input name="hatena_id" class="entry-search-input" id="label-admin-entries-hatenaid" type="text" placeholder="はてなIDを入力" list="hatena_ids" value=""> |
5 | <datalist class="js-hatena-ids-selector" id="hatena_ids"> |
6 | <option value="k-emu"></option></datalist> |
7 | </td> |
8 | </tr> |
3つめの<TR>
1 | <tr> |
2 | <th>投稿日</th> |
3 | <td> |
4 | <input name="datetime_from" class="entry-search-input" type="date" value=""> |
5 | 〜 |
6 | <input name="datetime_to" class="entry-search-input" type="date" value=""> |
7 | </td> |
8 | </tr> |
--------------------------------------------------
4つめの<TR>
1 | <tr> |
2 | <th class="checkbox-th"> |
3 | <div class="checkbox-table-cell"> |
4 | <input class="js-select-all-entries tipsy-bottom" type="checkbox" original-title="すべて選択"> |
5 | </div> |
6 | <div class="entry-table-cell"> |
7 | 記事タイトル |
8 | </div> |
9 | </th> |
10 | <th></th> |
11 | <th>作成者</th> |
12 | <th>カテゴリー</th> |
13 | <th>コメント数</th> |
14 | <th>投稿時間</th> |
15 | <th></th> |
16 | </tr> |
--------------------------------------------------
5つめの<TR> (記事情報が入っている)
2行目に<td class="td-entry-title"> というタグが入っています。これが記事の印。
情報が入る行番号は、画像の挿入有無や、記事本文が何も書かれていないなどの状況により変化します。
なので、URLや記事題名などの各種情報は、行番号決め打ちではなく、タグを検索してひとつずつ取得していきます。
ちなみに、本文が1文字も無い場合、15行目の<div class="entry-body-summary js-search-entry-body">の次の行には</div>が入ります。
1 | <tr class="tr-hover "> |
2 | <td class="td-entry-title"> |
3 | <div class="entry-table-wrapper"> |
4 | <div class="checkbox-table-cell"> |
5 | <input name="entry" type="checkbox" value="12345678901234567"> |
6 | </div> |
7 | <div class="entry-table-cell"> |
8 | <div class="entry-table-entry-title"> |
9 |
<a class="entry-title js-search-entry-title" href="https://blog.hatena.ne.jp/ hatenaID/hatenaID.hateblo.jp/edit?entry=12345678901234567">宇佐神宮</a> |
10 | </div> |
11 | <div class="entry-body has-thumbnail"> |
12 | <div class="entry-thumbnail-image"> |
13 | <img alt="アイキャッチ画像" src="https://cdn.image.st-hatena.com/image/square/aabbccddeeffggghhiijjkkllmmnnoo/ backend=imagemagick;height=60;version=1; width=60/https%%%.f.st-hatena.com%images%fotolife%%hatenaID% 20200109%20200109223037.jpg"> |
14 | </div> |
15 | <div class="entry-body-summary js-search-entry-body"> |
16 | (作成中) |
17 | </div> |
18 | </div> |
19 | </div> |
20 | </div> |
21 | </td> |
22 | <td class="td-right td-admin-button"> |
23 | <div class="entry-edit-buttons-row"> |
24 | <div class="dropdown-window-wrapper js-entries-edit-dropdown"> |
25 | <a class="btn dropdown-toggle" href="https://blog.hatena.ne.jp/ hatenaID/hatenaID.hateblo.jp/edit?entry=12345678901234567">編集</a> |
26 | <div class="entries-edit-dropdown-window dropdown-window"> |
27 | <ul class="list"> |
28 | <li> |
29 | <a href="https://blog.hatena.ne.jp/hatenaID/hatenaID.hateblo.jp/ edit?entry=12345678901234567"> |
30 | <i class="blogicon-edit"></i> 編集 |
31 | </a> |
32 | </li> |
33 | <li> |
34 | <a href="https://blog.hatena.ne.jp/hatenaID/hatenaID.hateblo.jp/ revisions?entry=12345678901234567"> |
35 | <i class="blogicon-recent"></i> 編集履歴を見る |
36 | </a> |
37 | </li> |
38 | <li> |
39 | <a href="https://blog.hatena.ne.jp/hatenaID/hatenaID.hateblo.jp/ edit?copy_target_id=12345678901234567"> |
40 | <i class="blogicon-entry"></i> コピーして新しい記事を書く |
41 | </a> |
42 | </li> |
43 | <li> |
44 |
<button class="js-top-placed-activate-button" data-summary="(作成中)" data-url="https://www.mypath-as-variant.com/entry/2020/01/09/223347" data-title="宇佐神宮" data-uuid="12345678901234567"> |
45 | <i class="blogicon-pinned"></i> トップページの先頭に表示する |
46 | </button> |
47 | </li> |
48 | </ul> |
49 | </div> |
50 | </div> |
51 | </div> |
52 | </td> |
53 | <td class="td-blog-author">hatenaID</td> |
54 | <td class="td-blog-category"> |
55 | </td> |
56 | <td class="td-blog-comment">0</td> |
57 | <td class="td-blog-description"> |
58 | <time class="time" datetime="2020-01-09T13:33:47.000Z" data-epoch="1578576827000" data-local="">2020年1月9日 22:33:47</time> |
59 | </td> |
60 | <td> |
61 |
<a href="https://www.mypath-as-variant.com/entry/2020/01/09/223347 |
62 | </td> |
63 | </tr> |