スマホからスクレイピングしてきたデータを見れるようにしたら便利だった

ここ半年。スクレイピングばかりしている。

自分には全体を眺めたいという欲求が少しだけ潜在している気がする。全体を眺めて何をするわけでもないんだけど、俯瞰された「何か」を見ていると、リラックス出来る。もちろん、そこには「発見」があるのかもしれない。トレンドだったり、一貫しているものだったり、意図だったり、生活感だったり、Googleで検索クエリーを組み合わせる探索とは、少し違う。それらをスクレイピングで満たしている。プログラムが情報の海原を生み出し続け、スクロールバーで泳ぎ、自分の日常生活に何らかの変化をもたらしてくれるもの面白い。

はてなを掘る

f:id:start162432:20160619194021p:plain (Rubyに関して、はてぶが3つ以上付いた、2016年〜2005年までを1ページで見れるようになっている)

良質なスクレイピングスポットを発見して、そこを掘り続けるのが楽しい。個人的な良質スクレイピングスポットは「はてな」だ。質の良い情報アウトプットされやすいのか、スクレイピングしていて、興味深い情報が多い。コーヒーを飲んでいる最中に、RubyPerlで書いた100行から200行程の小さなスクリプトが、はてなブログはてなブックマークを掘り続けてくれる。その後。外からスマホでデータにアクセスする。

スクレイピング + 静的HTML + Dropbox

スクレイピングしたデータをスマホでアクセス出来るようにしとくと便利だ。その時やっていることは、スクレイピングしてきたデータを静的HTMLとしてDropboxに出力するということだ。

今回はRubyで書いた。

静的HTMLをDropboxに生成しているところのコードを載せてみる。

output_html = <<EOS
<html>
<head>
  <meta charset="UTF-8">
</head>
<body>
#{data_list}
</body>
</html>
EOS


File.write("/home/username/Dropbox/one_page_hatebu/output.html", output_html)

ヒアドキュメントにHTMLを直書きして、表示させたいデータを式展開でヒアドキュメントの中に埋め込み、File.writeでDropboxのフォルダの中に.htmlファイルを出力している。今回は、data_listにスクレイピングしたデータを入れている。

最後に

不思議と、スクレイピングはプログラミングの学習にも繋がり、最近使い始めたRubyも書けるようになってきた。これもスクレイピングをすることの恩恵なのかもしれない。プログラミングを覚えるきっかけとしてスクレイピングは効果的だと思うのでおすすめしておきたい。

はてなブログの新着エントリーを10件から500件に増やしてたのを作ってみた

新着エントリーが10件表示だったので、500件表示にしてみた。ブログ探しに使ってみてください。

はてなブログ 新着500件

f:id:start162432:20160410215744p:plain

テック系ブログを探すのに丁度良い

僕はテックエントリーが大好きで、自分の知らない領域の技術について読んだり、ライフハック的な技術の使い方を淡々と記録している日記を読んだりします。これが楽しい。

ただ、ぼーっと新着エントリーを眺めるより、テック系ブログを見つける。と目的を持ちながら使うとかなり見つかります。

作る時に参考になったPerl

本書のなかで、WAF使おうぜWAFと書いてあった。そんで、Mojoliciousがおすすめと書いてあったので、その通りにMojoliciousで作った。自分の使っているのはMojolicious::Liteだけど十分ウェブプログラミングが楽しめる。最初はローカル環境で作ってから、本番環境で動かせるようにした。本書はPerlビギナー向けに書かれている本で、CPANの解説も豊富だし、なによりPerl書きたい!ってなる良い本です。

Perlについて語ろう

Perlについて語ろう

最近買ったPerlの本

小さいPerlプログラムを書くのが楽しくて、自分にとって有益そうな小さな案が浮かんだら小さなプログラムでも書いてしまいたくなる。そんな中。少しでもPerlを便利に使いこなせるようになるために2冊程本を買ってみた。中古で買ったので合計で1300円程だった気がする。Perlの本は古い本が多いので、全体的に安い印象。

Perl CPANモジュールガイド

Perl CPANモジュールガイド

本のタイトル通り。CPANモジュールが沢山掲載されている。参考価値が高い一冊。この本の元ネタとなっているメルマガが、ウェブに少しだけ掲載されていて、最初はここを眺めていた。本の方では、400ページ以上CPANモジュールの解説があって、素直に驚いた。

CGI & Perl ポケットリファレンス (Pocket reference)

CGI & Perl ポケットリファレンス (Pocket reference)

標準関数が沢山掲載されている。古い本なんだけどPerlビギナーの自分にとっては役に立つ。

2冊とも、眺めてるだけでも有益かもしれない。頭の片隅に置いといて、必要な時に詳細を読みこめばいいのかもしれない。リファレンスとして読書できる素敵な2冊だと思いました。

はてなブログを1ページで見れるようにすると結構便利だった

phaさんの無職日記を眺めてHPを回復させることが好きです。ただ、閲覧するときにはてなブログが生成している月別アーカイブからだと、このような表示になってしまいます。

f:id:start162432:20160217201208p:plain

このような表示形式だと過去の日記を快適に見ることが難しいなと思いました。「次のページ」ボタンを連射するのが疲れるからです。なので月別アーカイブをスクレイピングして、一枚のページにまとめてみました。

f:id:start162432:20160217201000p:plain

このような表示形式にしてあげると、1ページで2016年から2003年。ブログ全体を見ることが出来ます。

使ったPerlモジュール

LWP::Simple
HTML::TreeBuilder
Time::Piece
DBI
Mojolicious::Lite

技術評論社の技術書を画像一枚にまとめてみた

前回。ブログの記事で取り上げた、技術書出版数ランキングで、一位を獲得した技術評論社の出版している技術書を一枚の画像にまとめてみました。発売日順に左上から右に並べています。

ネットワーク・UNIX・データベース書籍

f:id:start162432:20160207173119p:plain

拡大表示で表示する

プログラミング書籍

f:id:start162432:20160206224850p:plain

拡大表示で表示する

コンピュータの技術書出版数ランキング(1位~100位)

コンピュータの技術書を出版している出版社がどれだけ本を出版しているのか気になったので調べてみました。データはAmazonの出版社一覧から手に入れてるので、ランキングに正しさがあるのかは分かりません。ある程度の傾向は掴めると思います。

ランキング

1位 技術評論社
4873冊

2位 SBクリエイティブ
3433冊

3位 秀和システム
2850冊

4位 アスキー
2752冊

5位 翔泳社
2615冊

6位 オーム社
2555冊

7位 毎日コミュニケーションズ
2490冊

8位 日経BP
2329冊

9位 インプレス
2092冊

10位 工学社
1615冊

11位 ナツメ社
1397冊

12位 宝島社
1323冊

13位 共立出版
1258冊

14位 ソーテック社
894冊

15位 日刊工業新聞社
863冊

16位 エーアイ出版
828冊

17位 オライリー・ジャパン
823冊

18位 KADOKAWA/アスキー・メディア...
737冊

19位 CQ出版
716冊

20位 晋遊舎
680冊

21位 エムディエヌコーポレーション
669冊

22位 コロナ社
663冊

23位 ソシム
649冊

24位 インフォレスト
647冊

25位 ローカス
614冊

26位 講談社
550冊

27位 学研
490冊

28位 森北出版
462冊

29位 日本実業出版社
461冊

30位 サイエンス社
453冊

31位 カットシステム
443冊

32位 メディアテック出版
407冊

33位 日本経済新聞出版社
406冊

34位 新星出版社
404冊

35位 東京電機大学出版局
382冊

36位 ピアソンエデュケーション
375冊

37位 マイナビ
373冊

38位 FOM出版
366冊

39位 岩波書店
360冊

40位 近代科学社
353冊

41位 丸善
350冊

42位 秀和システムトレーディング
327冊

43位 朝倉書店
325冊

44位 実教出版
319冊

45位 培風館
318冊

46位 ダイヤモンド社
313冊

47位 エスシーシー
308冊

48位 昭晃堂
293冊

49位 アスペクト
292冊

50位 東洋経済新報社
292冊

51位 ビーエヌエヌ
291冊

52位 インプレスR&D
284冊

53位 ディーアート
284冊

54位 エクスナレッジ
283冊

55位 ジャストシステム
273冊

56位 リックテレコム
271冊

57位 PHP研究所
267冊

58位 誠文堂新光社
252冊

59位 笠倉出版社
249冊

60位 NTT出版
247冊

61位 成美堂出版
245冊

62位 工学図書
242冊

63位 ソフトリサーチセンター
237冊

64位 日本文芸社
234冊

65位 パーソナルメディア
230冊

66位 英和出版社
229冊

67位 電波新聞社
229冊

68位 明日香出版社
227冊

69位 学習研究社
223冊

70位 ボーンデジタル
219冊

71位 三才ブックス
219冊

72位 日本規格協会
210冊

73位 広文社
208冊

74位 新紀元社
206冊

75位 中央経済社
195冊

76位 エクシードプレス
190冊

77位 JICC出版局
186冊

78位 ラジオ技術社
180冊

79位 工業調査会
175冊

80位 西東社
174冊

81位 KADOKAWA/中経出版
161冊

82位 日科技連出版社
160冊

83位 ソニー・マガジンズ
154冊

84位 シーアンドアール研究所
153冊

85位 リットーミュージック
153冊

86位 産業図書
153冊

87位 双葉社
147冊

88位 九天社
144冊

89位 千舷社
135冊

90位 徳間書店
132冊

91位 ダイアプレス
128冊

92位 山海堂
127冊

93位 ムイスリ出版
125冊

94位 ベストセラーズ
124冊

95位 メディアボーイ
117冊

96位 ビー・エヌ・エヌ
115冊

97位 朝日新聞社
115冊

98位 アイテック情報処理技術者教育センター
114冊

99位 日本評論社
114冊

100位 海文堂
113冊

データとプログラム

Amazonの出版社一覧を参考にします。(出版社一覧にオライリー・ジャパンがなかったので、ココを参考にしました)

f:id:start162432:20160203184123j:plain

データを取ってきました。データがソートされて並んでいません。 f:id:start162432:20160203184317j:plain

使い捨てプログラムですが、ソートしてくれました。File::Slurpモジュールを使用しました。read_fileを使うことで、一行でテキストファイルを配列データに変換してくれて便利でした。

use strict;
use warnings;
use File::Slurp;

my @lines = read_file('IT_publisher_list');

my %list;
for my $pub_str (@lines) {
  $pub_str =~ s/,//;
  $pub_str =~ /(.*) \((\d*)\)/;
  $list{$1} = $2; 
}

for my $key (sort {$list{$b} <=> $list{$a} || $a cmp $b} keys %list) {
  print $key . "=" . $list{$key} . "\n";
}

amazonのエロ本ランキング(1位~100位)を取得する使い捨てプログラムを書いた

コード

use strict;
use warnings;
use WWW::Mechanize;
use HTML::TreeBuilder;

sub get_erorank {
  my %rank_data = (); 
  foreach my $page_number (1..5) {
    my $mech = new WWW::Mechanize( autocheck => 1 );
    $mech->get('http://www.amazon.co.jp/gp/bestsellers/books/10667101/ref=zg_bs_10667101_pg_2?ie=UTF8&pg='.$page_number);
    my $tree = HTML::TreeBuilder->new;
    $tree->parse($mech->content);

    foreach my $zg_tag ($tree->look_down("class", "zg_itemRow")) {
      my $rank = $zg_tag->look_down("class", "zg_rankNumber")->as_text;
      $rank =~ s/\.//;
      my $title = $zg_tag->look_down("class", "zg_title")->as_text;
      $rank_data{$rank} = $title;
    }   
  }
return %rank_data;
}

説明

使用モジュールはMechanizeとTreeBuilderです。Mechanizeで1ページから5ページまでのHTMLを取得しています。あと後TreeBuilderでHTMLを解析して、お目当ての情報(順位とタイトル)を取得しています。LWPでアマゾンのエロ本ランキングを取得すると年齢認証ページに飛ばされてしいます。MechanizeがAgentだと、年齢認証ページに飛ばされず、そのままランキングページにアクセスできます。なのでMechanizeを使っています。

ウェブから情報を自動取得するテクニックが沢山書いてある本

Spidering hacks―ウェブ情報ラクラク取得テクニック101選

Spidering hacks―ウェブ情報ラクラク取得テクニック101選