webページをダウンロードするブックマークレットを作成しよう

webページをダウンロードして、必要な部分を取り出す…そんなルーチンワークがあったとしたら、どうやって処理しますか? ごく単純なものであれば、ブラウザでwebサイトを開いて直接コピペしてテキストに貼り付けるなんて作業になるのかもしれません。でもそこはなるべく「間違えずに手軽に処理したい」ところ。自動化できる部分を用意するのがいいのではないでしょうか?

というのが、このサイトのアピールポイントだったりするわけなのですが…ひとまずセールストーク(?)はおいておきます。ともあれ、仮に複雑な処理をしなきゃならないとしたら、取り出すデータはなるべく人の手で作業・加工することなく進めたいところ。そのためにもそのページを解析して必要部分を取り出せるようにしたい。では、そのためにはどうすればいいのか? まずはそのページ自体をローカルにダウンロードしてしまってからじっくり解析していくのがいいのかと思います。

スポンサーリンク

今みているページをダウンロード保存するにはブックマークレットを作ってしまえばいいかも

ブックマークレットの利用方法としては以前F1公式サイトでのスクレイピングを紹介しました。

formula1公式サイトのドライバーズランキングをスクレイピングしてみよう その1
ニッチ過ぎて需要があるかどうかわかりませんが。。。javascriptで組んで、最終的にはブックマークレットにしてお手軽に実行できる...

そこでは今現在開いているページに対してデータを抽出する流れでスクリプトを書いていきましたが、今回は一旦ローカルにダウンロードする方向で考えてみたいと思います。
web APIの利用で、比較的簡単にダウンロード用のスクリプトを書くことができるようになりました。ホント技術の進歩はすごいですね。

XMLSerializerでテキスト化

まずはXMLSerializerで今みているページをテキスト化してしまいましょう。

XMLSerializer を使うと DOM サブツリーや DOM 文書をテキストに変換できます。
(MDNより引用)

使用するメソッドはserializeToStringで、そこにドキュメントを放り込めばhtmlを取得できるはずです。その内容をsspageに格納しておきます。

var sspage = new XMLSerializer().serializeToString(document);

次にweb APIのBlobを使います。以下のような記述でblobオブジェクトを生成します。

var blob = new Blob([sspage], { "type" : "text/plain" });

続けてwindow.URLでblobオブジェクトのurlを生成します。メソッドはcreateObjectURLで、それをbloburlに入れます。

var url = window.URL;
var bloburl = url.createObjectURL(blob);

ここまでで、ダウンロードさせる中身の部分およびurlの作成となります。

ダウンロード部分のスクリプトを組む

引き続きそれをダウンロード部分のスクリプトを組んでいきます。まず、createElementでaタグを作成。

var a = document.createElement('a');

ダウンロードプロパティでファイル名をdownload.htmlに。hrefは先ほど生成したurl(bloburl)にします。

a.download = 'download.html';
a.href = bloburl;

最後にclickメソッドでクリックをしてあげてダウンロードをします。

a.click();

コード全体はこちら

var sspage = new XMLSerializer().serializeToString(document);
var blob = new Blob([sspage], { "type" : "text/plain" });
var url = window.URL;
var bloburl = url.createObjectURL(blob);

// 新たにaタグを作成してダウンロード
var a = document.createElement('a');
a.download = 'download.html';
a.href = bloburl;
a.click();

書いたJavascriptコードが実際に動くか試してみる

まず、上で書き上げたコードがちゃんと動くのか確認しましょう。ここではchromeのデベロッパツールにて説明します。まずデベロッパーツールを立ち上げます。タブの「console」をクリックしてコンソール画面にします。

2016-08-19_13h26_24

コンソールの画面になったらカーソルが点滅しているところに先ほど書いたスクリプトをコピーして貼り付けます。

2016-08-19_13h27_30

貼り付けたらエンターキーをおして実行させます。

2016-08-19_13h29_05

実行結果が反映されます。今回の場合はブラウザーでのダウンロードができていればOKです。

2016-08-19_13h30_35

次はブックマークレット化です!

コード短縮に便利なサイトを利用する

ホント色々と便利なものを公開してくれています。それらを活用することも時短のポイントですよね。使えるものはどんどんつかって作業軽減しましょう~。

ブックマークレット化してくれるページ

もちろん、自分で試行錯誤して処理するのも必要な時間ですので、頑張ってブックマークレット化を自分でしてみたい方は以下のページを使わないで頑張ってみてください。いや、さくっとコードを生成してもらいたいって方は素直に使っちゃいましょう。

WDF – Software : ブックマークレット作成スクリプト

javascrioptコードの圧縮をしてくれるページ

これはこれで、ファイルの軽減、高速化につながるので、組み終わったら実施しておくのもいいですね。ただし、コードの視認性は悪くなるので、元のスクリプトもしっかり保管しておきましょう。

Closure Compiler Service

ブックマークレット用のスクリプト完成!

今回は上にあるブックマークレット化してくれるページでさくっと変換いたしました!!

javascript:(function(){var sspage=(new XMLSerializer).serializeToString(document),blob=new Blob([sspage],{type:"text/plain"}),url=window.URL,bloburl=url.createObjectURL(blob),a=document.createElement("a");a.download="download.html";a.href=bloburl;a.click();})();

ブックマークレット登録の仕方は以下の記事を参照してくださいませませ。

formula1公式サイトのドライバーズランキングをスクレイピングしてみよう その4
おなじみになりつつありますが、まずはそれぞれのクラス名やタグの整理、コードを再確認しておきましょう。 クラス名、タグ 【...

まとめ

今回作ったブックマークレットはmarkdownで記事書きして、それをブラウザ表示したあとにこのブックマークレットを実行させるなんて流れで考えていました。ソースを表示するでもいいのですが、このブックマークレット自体はいろんなページのダウンロードに使える汎用タイプなので、これ単体だけでも作っておいてもいいかもですよ。お試しください。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする