特定のタグだけ抜き出し、文字数をカウントするマクロを作って頂きたいです。
やりたいことは…
Webサイトのソースをコピペしてマクロを実行すると
・bodyタグ内の文字数をカウント
・titleタグを抜き出す
・hタグを抜き出す
の3つを実行するようにしたいです。
大まかな流れは下記のようになると思います。
① <title>~</title><body>~</body>以外の部分を全消去する。
② ①を実行した後、見やすいように少し整形する。
【文字数】
<body>~</body>の間にある文字数を表示
【title】
<title>~</title>の間にある文字を表示
【hタグ】
hタグのみ表示
例として
http://programming-study.com/trouble/hidemaru/
のサイトのソースを全てコピペした状態でマクロを実行するとどうなるようにしたいか?
のファイルをアップロードしましたので、確認をお願いします。
こちらのファイルです
http://35.gigafile.nu/0326-7c270f6e658a9a8f3d53d011d640d692
Bookmarklet でも良いということでしたので、書いてみました。
(function() { const d_ = document; Array.prototype.forEach.call(d_.body.querySelectorAll("script,style,noscript"), function(e) { e.parentNode.removeChild(e); }); const text = d_.body.textContent.replace(/\s+/g, ""); const count = text.length; const title = d_.title; const hx_list = d_.querySelectorAll("h1,h2,h3,h4,h5,h6"); const panel = d_.body.appendChild(d_.createElement("textarea")); panel.style.position = "fixed"; panel.style.backgroundColor = "white"; panel.style.border = "1px solid black"; panel.style.padding = "1ex"; panel.style.top = "0"; panel.style.width = "80ex"; panel.style.height = "20em"; function indent(tag) { let n = parseInt(tag.replace(/^H/, "")) - 1; let pad = ""; for (let i = 0 ; i < n ; ++i) { pad += "\t"; } return pad; } panel.value = [ "【文字数】", count, "\n【title】", title, "\n【hタグ】", Array.prototype.map.call(hx_list, function(h) {return indent(h.tagName) + h.tagName + ":" + h.textContent;}).join("\n"), ].join("\n"); })();
Firefox でしか動作確認をしていませんが、Google Chrome や Edge なら動くと思います。
はてなには、Hatena::Let という Bookmarklet をホスティングするサービスがあるので、そこにも置きました。
http://let.hatelabo.jp/a-kuma3/let/hJmfy_yqmbJ2
赤で括ったあたりを右クリックでブックマークしてください。
データを抽出したいページを表示した後に、ブックマークした Bookmarklet をクリックして実行してください。
質問で挙げられたページだと、こんな感じで抽出結果を表示します。
TEXTAREA で表示しているので、クリックして ctrl+A で全選択して、ctrl+C でコピーできます。
補足です
秀丸マクロは、(Excel VBAと比べると劣るかもしれませんが)色々できます。
HTMLタグ削除&整形マクロ
http://hide.maruo.co.jp/lib/macro/tagdelete.html
対応するHTMLタグへの移動を行うマクロ
http://hide.maruo.co.jp/lib/macro/tagidou.html
特定の文字列をカウントするマクロ
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q132924...
なので今回、実現したい内容としては
「hタグを抽出して整形する」
ができれば、あとは既存のマクロを利用、
または改良することで対応できるとは思います。
ありがとうございます!このBookmarkletをクリックすると左上に窓が出現しますが、これを閉じるにはタブを閉じるしかないのでしょうか?
(エクセルVBA等なら実現しやすいとは思いますが、あくまで秀丸マクロにこだわっています)
それは、残念。
回答がつくと良いですね。
回答を待ちます。
script タグがうまく除去できないのも、理由はそんなところではないでしょうか。
VBA でも、素の VBA でやれと言われると、げっそりします。
HTMLタグ削除&整形マクロ
http://hide.maruo.co.jp/lib/macro/tagdelete.html
である程度は対応できているので、script タグが除去できないのはあきらめます。
それなら対応可能でしょうか?
それとも、やはりエクセルVBAのほうがいいですか?
ちょっとイメージが沸かないのですが、デスクトップ上にjavascriptのアイコンがあって、
HTMLソースをコピペしたテキストファイルをドラッグ&ドロップすると、文字数カウント&hタグを抜き出す
…といった感じでしょうか?
ブックマークの URL に javascript のコードを書いて、実行したいページで そのブックマークをクリックすると、そのコードを実行できます。
編集結果は、表示しているページの中に表示したりとかできます。
http://book.tsuhankensaku.com/hon/bookmarklet-googlechrome.html
これなら私にもできそうです。
作成お願いしてよろしいでしょうか?
また可能なら、書いたコードは
GIGAファイル便
http://gigafile.nu/
にアップして頂けると嬉しいのですが…