プログラマでありたい

おっさんになっても、プログラマでありつづけたい

AWS Summit 2016 Tokyoの感想

 3日間のお祭りが終わったので、感想を残しておきます。私の立場としては、出展者やAWS本の著者、ベンダー、JAWSUG参加者など色々あります。まぁその辺りを無視して、ただの感想です。

出展者として



 AWS Summitのブースに立ったのは久しぶりでした。ブースに訪れてくれるユーザのAWSの関心の高さ・具体性が段違いに高いというのが印象的でした。たしか前にたったのは3年程前で、その時は情報収集段階という人が多かったです。今年は、もう既に導入している/導入検討している上で、具体的な悩みなどを色々聞くことができました。後のフォロー次第ですが、出展者側としては、AWS Summitはやはり重要な機会ですね。

AWS本の著者としてて



 ブースに『Amazon Web Services パターン別構築・運用ガイド』と『Amazon Web Services クラウドネイティブ・アプリケーション開発技法』を並べて、立ち寄った人に紹介していました。パターン別構築・運用ガイドについては、結構な割合で知っている人が多くて嬉しい限りでした。一方で、クラウドネイティブ・アプリケーション開発技法の知名度はまだまだでした。もう少し広まればなぁと思います。まぁ発売1年と1ヶ月で、第4刷・初刷の差は大きいのかも。来年は、両方共しっているよと言われることを目指したいです。

セッション参加して



 ブースにいたり個別ミーティングをしてたりと、あまりセッションは参加できなかったです。参加したのは、2つのキーノートとウフルさんのIoTセッションです。前者については、昨年一年の振り返りと今年一年の方向性の確認のためです。概ね想定通りユーザー側の積極的利用が牽引するという形にいたのを確認できて良かったです。
※まぁこれも全国に広がったユーザコミュニティとそれを支えるエンジニアのお陰だと思いますが。
ウフルさんのセッションは、予想以上に良かったです。IoTというバズワードの陰で顕在化している問題もしくは落とし穴にハマりつつ乗り越えていった知見の共有が素晴らしかったです。

ランチ



 カレーが食べたかった。ただし、昨年の混雑を考えると仕方がないですね。

JAWS-UG



 JAWS-UGの認知を高める場としては、最高の場所ですね。スペースに対して人数が多すぎる部分はありますが、お祭りとしては大成功ではないでしょうか。ブースの片付けでLTは殆どみれず、ウルトラクイズは壇上手前で間違えたのは痛恨の極みでした。

感想



 お祭りのような3日間でした。今日からまた日常に戻って、一歩一歩進んでいきます。ただ3日間立ちっぱなしはシンドかったなぁ。

もうすぐ出る/最近出たAWS本5冊

 AWS Summit2016の興奮が冷めやまぬ今日この頃です。Amazonのクラウドのカテゴリを見ていると、新しい本が大量に並んでいました。AWS本が一気に4冊も登場ということで、軽く紹介してみます。タイトルと目次だけみて感想を書いているので、悪しからずご了承ください。

Amazon Web Services企業導入ガイドブック


 タイトルとサブタイトルで対象者が明確化されているのが、この『Amazon Web Services企業導入ガイドブック -企業担当者が知っておくべきAWSサービスの全貌から、セキュリティ概要、システム設計、導入プロセス、運用まで-』です。その名の通り企業に導入する際に検討すべき事項が網羅的にカバーされています。フォーカスも技術的な話ではなく、AWSを導入する上でどう標準化していくかとかプロセスに落とし込んでいくにはどうしていけばよいのかという内容でした。(AWS Summitの会場で、パラパラと立ち読みしました。)そんなこんなもあり、息の長い本になるのではという一冊です。
 ちなみに注目すべきは、著者陣です。荒木さんに始まり大谷さん、小林さん、酒徳さん、 高田さん、瀧澤さん、山本さん、 吉羽さんとAWSの中の人・もと中の人のオールスターで書かれています。後にも先にもこのメンツの著作を読めるのは、この本だけでしょう。是非、紙の本を買って、サイン行脚の度にでましょう。サインを求める際に質問も出来たら、きっと全部集めたころにはAWSマスターになれるはずです。なお、私のAWS本の第三弾は、こんな感じの本にしようか企画立てておりました。どうしようかなぁ

Amazon Web Services企業導入ガイドブック -企業担当者が知っておくべきAWSサービスの全貌から、セキュリティ概要、システム設計、導入プロセス、運用まで-

Amazon Web Services企業導入ガイドブック -企業担当者が知っておくべきAWSサービスの全貌から、セキュリティ概要、システム設計、導入プロセス、運用まで-

  • 作者: 荒木靖宏,大谷晋平,小林正人,酒徳知明,高田智己,瀧澤与一,山本教仁,吉羽龍太郎
  • 出版社/メーカー: マイナビ出版
  • 発売日: 2016/06/10
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

ちなみに著者の吉羽さんが、抽選でのプレゼントキャンペーンをしていました。申込期間は、2016年6月5日〜9日です。

【10名様にプレゼント】Amazon Web Services企業導入ガイドブック - connpass

Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門



 山田祥寛さんの監修のAWS本です。『Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門』というタイトルから察すると、アプリケーションエンジニアがどうAWSを使うのかなと思ったのですが、目次を見る限りは普通にインフラよりっぽい話が多そうです。Dockerを扱っているのもよいですね。
※まだ読んでいません。

Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門

Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門

  • 作者: WINGSプロジェクト阿佐志保,山田祥寛
  • 出版社/メーカー: 翔泳社
  • 発売日: 2016/06/17
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Amazon Web Services 定番業務システム12パターン設計ガイド



 『Amazon Web Services 定番業務システム12パターン設計ガイド』は、日経BPからの出版です。ページ数が176ページと薄めです。タイトルどおり12個のパターンをどう説明するのかな目次を見ると、AWSの概要的な説明はなしに最初からパターンの説明から入っているようです。AWSの説明については巷にいろいろあるので、それもありなのかもしれません。吉とでるか凶とでるか、注目です。
※まだ読んでいません。

Amazon Web Services 定番業務システム12パターン設計ガイド

Amazon Web Services 定番業務システム12パターン設計ガイド

実践AWS lambda 限定お試し版



 『実践AWS lambda』は、日本におけるサーバレスアーキテクチャのビジョナリーであるAWSの西谷さんの書き下ろし本です。AWS Summit向けの限定今回で、本編は9月発売とのことです。帯に"「AWS Lambda」の基本から、中級者向けの「こなれた」使い方まで満載!"とあるので、期待感が増します。個人的には、フレームワーク編Serverless,Zappa,APEXの3つと継続的インテグレーションが気になります。

実践AWS lambda 限定お試し版

実践AWS lambda 限定お試し版

Amazon Web Services クラウドネイティブ・アプリケーション開発技法



 最近じゃないと石を投げられそうですが、1ヶ月と少し前なのでご容赦ください。Amazon Web Services クラウドネイティブ・アプリケーション開発技法のコンセプトは、アプリケーションからAWSをどう組み込むかです。通常のAWS本とは、逆のアプローチを試みています。サンプルコード盛り沢山で、触っているうちにアプリの作り方もAWSの使い方も覚えられるようなものを目指しました。

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく (Informatics&IDEA)

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく (Informatics&IDEA)

  • 作者: NRIネットコム株式会社,佐々木拓郎,佐藤瞬,石川修,高柳怜士,佐藤雄也,岸本勇貴
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2016/04/20
  • メディア: 単行本
  • この商品を含むブログを見る

 ちなみに1年前に出した『Amazon Web Services パターン別構築・運用ガイド』についても未だに売れ続けています。日によっては、Amazonのクラウドカテゴリのトップということもあります。定番本になると良いですね

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド

感想



 6月だけでAWS本が3冊+1冊の発売です。Summitに合わせて来たんだろうなぁと予想ができます。というか、サミット前に出版したかったのではと邪推しております。(Amazon Web Services企業導入ガイドブックは、会場で見ることができましたしねぇ)

Amazon Web Services企業導入ガイドブック -企業担当者が知っておくべきAWSサービスの全貌から、セキュリティ概要、システム設計、導入プロセス、運用まで-

Amazon Web Services企業導入ガイドブック -企業担当者が知っておくべきAWSサービスの全貌から、セキュリティ概要、システム設計、導入プロセス、運用まで-

  • 作者: 荒木靖宏,大谷晋平,小林正人,酒徳知明,高田智己,瀧澤与一,山本教仁,吉羽龍太郎
  • 出版社/メーカー: マイナビ出版
  • 発売日: 2016/06/10
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

AWS認定ソリューションアーキテクト - プロフェッショナルに合格したので、調子に乗って勉強方法を考えてみる

f:id:dkfj:20160525073947p:plain

 AWSの本を2冊書いていますが、AWS認定資格を1つも持っていませんでした。(正確に言うと、ソリューションアーキテクトのアソシエイトを持っていたけれど、2016年4月末で有効期限切れで失効していました。)会社の後輩たちが、どんどんプロ資格を取っていって疑いの目を向けられるようになってきたので、これはまずいと受験することにしました。昨日受けて無事合格したものの、幾つか反省点があるのでまとめてみます。

AWS認定資格の概要



 AWSの認定資格は、2016年5月現在では2つのレベル・3つの分野があります。まずエントリーレベルであるAssociateは、一番メジャーで全般的な知識を問うSolutions Architect、開発者向けのDeveloper、運用管理者向けのSysOpsの3つがあります。そして下位の資格を持っていないと受験できないプロフェッショナルは、Solutions ArchitectとDevOpsがあります。DevOpsは、DeveloperもしくはSysOpsのどちらかの資格をもっていれば受験できます。何となくRPGの合成職みたいで厨二病な感じがしますね。
 試験範囲は、AWS認定の準備からそれぞれの資格に遷移し、試験ガイドのPDFを落とすことで解ります。例えば、SAプロの場合は、下記のような出題範囲と配点になっています。

  分野 試験に占める範囲
1.0 高可用性および事業継続性 15%
2.0 原価計算 5%
3.0 デプロイメントマネージメント 10%
4.0 ネットワーク設計 10%
5.0 データストレージ 15%
6.0 セキュリティ 20%
7.0 拡張性と伸縮自在性 15%
8.0 クラウド移行およびハイブリッドなアーキテクチャ 10%

 分野の中で扱う内容は、ガイドの中に細かく書いています。

AWS認定ソリューションアーキテクトの勉強方法



 上記を踏まえてどう勉強するかです。試験の出題者の意図としては、試験対象の範囲の知識を満遍なく持っていて、その中から適切なアーキテクチャを選択できるかという点にあります。ということは、当然試験範囲のサービスについては把握しておく必要があります。またAWS認定試験の特徴としては、具体的なシーンに基いて解決策を求めるという傾向があります。その為、サービスの知識だけではなく、実践的なアーキテクチャ設計の経験が必要になります。その辺りを踏まえて効率的に勉強するとしたら、下記の優先順位あたりかなと思います。

 概要を知った上で、サービスに触れる・デザインパターンを知るということが特に重要になります。

弱点補強



 SAプロの試験の範囲に、専用線サービスであるダイレクトコネクトや複数のアカウントでの認証連携があります。何気にここが弱点になっている人が多いのではないでしょうか。そもそもダイレクトコネクトを設置する機会は少ないはずです。また複数アカウントを運用するという経験も、利用環境によっては全くない人もいると思います。ここの部分、自習方法があるのでやっておく方がよいかもしれません。

 ダイレクトコネクトについては、AWS専用線アクセス体験ラボです。これは実際にオンプレミスのルーターを設定して、AWS Direct Connectを使ってVPCに接続するハンズオンとなっています。私は参加したことがないのですが、参加した人に聞くとかなり実践的で勉強になるそうです。一度手を動かしているのと動かしていないのでは、勉強するにしても情報の吸収力が違います。東京・大阪に限定されていますが、ぜひ一度受けてみると良いのではないでしょうか。

 次に複数アカウントの連携です。これは2つのアカウントを使って試してみましょう。クロスアカウントでロールによって認証などの経験があると、STS周りの説明を聞いた時に理解が進むはずです。アカウント複数作っても、IAMだけだと無料です!

今回の受験に関して実施したこと



 自分の中で、AD関係・クロスアカウントでの認証周りが弱点ということは解っていました。またKMS(Key Management Service)についても知識が足りないので補強しようかなと思ってました。が、時間切れで結局まったくやらずに受験という形になってしまいました。案の定、その辺りに関係するセキュリティの配点が低かったです。反省

 AWSに関しては、最近の業務では実務的な意味で深いことは自分でやっていないです。一方で、AWS技術コンサルティングサービスみたいな形で、お客さんのところに行ってよろず相談をしています。その中で色々な環境と悩みを聞いてアーキテクチャを考えているので、その辺り経験値面で有利だったかなぁと思います。ちなみにこのコンサルティング、基本はAWS前提ですがアプリアーキテクチャの話とか多岐に渡るので油断が出来ないです。自分自身にとっても勉強になるので、楽しいのですけどね。興味がある人は、こっそり連絡くださいw

感想



 受かって良かった!!

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく (Informatics&IDEA)

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく (Informatics&IDEA)

  • 作者: NRIネットコム株式会社,佐々木拓郎,佐藤瞬,石川修,高柳怜士,佐藤雄也,岸本勇貴
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2016/04/20
  • メディア: 単行本
  • この商品を含むブログを見る

クローラー/スクレイピング本が充実

 ふと気がついたのですが、ここ1〜2年で言語ごとのクローラー/スクレイピング本が出てきています。まとめがてらに感想と一緒に紹介してみます

PythonによるWebスクレイピング



 直近で出たスクレイピング本としては、PythonによるWebスクレイピングです。購入だけしてまだ読んでいないのですが、BeautifulSoupとScrapyを利用してスクレイピングしているようです。個人的にはrubyを使ってスクレイピングすることが多いのですが、BeautifulSoupはrubyのnokogiriより使いにくいと思っています。一方でrubyのクローラーフレームワークであるanemoneよりScrapyの方が優れた設計・特性をもっているかなぁと思っています。スクレイピングを始める前にrubyかpythonかの選択に悩んだのですが、BeautifulSoupよりnokogiriが良いやという理由でrubyを選択しました。この本を読みながらじっくりPythonのスクレイピングを学んでみようかなと思います。

 それ以外に興味深い点としては、PDFやMS Word、さらには画像認識とテキスト処理ということでOCRといったことにも取り組んでいます。この辺り興味ありますね。

PythonによるWebスクレイピング

PythonによるWebスクレイピング

目次

まえがき
第I部 スクレイパーを作る
1章 最初のWebスクレイパー
1.1 つなげる
1.2 はじめてのBeautifulSoup
2章 高度なHTMLパーシング
2.1 いつもハンマーが必要なわけではない
2.2 BeautifulSoupの別の使い方
2.3 正規表現
2.4 正規表現とBeautifulSoup
2.5 属性へのアクセス
2.6 ラムダ式
2.7 BeautifulSoupを超えて
3章 クローリングを開始する
3.1 単一ドメインを走査する
3.2 サイト全体をクローリング
3.3 インターネットをクローリング
3.4 Scrapyでクローリング
4章 APIを使う
4.1 APIはどう働くか
4.2 共通表記
4.3 レスポンス
4.4 Echo Nest
4.5 Twitter
4.6 Google API
4.7 JSONをパースする
4.8 すべてをホームに集める
4.9 APIについてさらに学ぶ
5章 データを格納する
5.1 メディアファイル
5.2 データをCSVに格納する
5.3 MySQL
5.4 メール
6章 文書を読む
6.1 文書エンコーディング
6.2 テキスト
6.3 CSV
6.4 PDF
6.5 Microsoft Wordと.docx

第II部 高度なスクレイピング
7章 汚れたデータをクリーニング
7.1 コードでのクリーニング
7.2 事実の後でクリーニング
8章 自然言語の読み書き
9章 フォームとログインでクロール
10章 JavaScriptのスクレイピング
11章 画像処理とテキスト認識
12章 スクレイピングの落とし穴を避ける
13章 Webサイトをスクレイパーでテストする
14章 リモートでスクレイピング

付録A Python入門
付録B インターネット入門
付録C Webスクレイピングの適法性と倫理

訳者あとがき
索引

JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック



 Node.jsでクローラーといえば、このJS+Node.jsによるWebクローラー/ネットエージェント開発テクニックです。この本の特徴としては、Node.jsのモジュールをいろいろ紹介しているので、Node.js初学者に作りながら学べるという点が大きいです。一方でクローラー特有の要素であるHTMLから要素の指定方法など、もう少し説明が欲しいなぁと思うこともあります。ただ、コンパクトにまとまってバランスの良い1冊であることは間違いありません。

JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック

JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック

第1章 開発環境の準備
第2章 Web データの収集
第3章 ログインの必要なWebサイトをクロールする
第4章 データの整形と保存
第5章 形態素解析で日本語を扱う
第6章 クローラーのためのデータソース
第7章 データの分類と予測と機械学
第8章 データの視覚化と応用

Excel VBAでIEを思いのままに操作できるプログラミング術



あまりクローラー/スクレイピング本と認識されいないけど、凄い1冊がExcel VBAでIEを思いのままに操作できるプログラミング術です。ExcelのVBAからIEを呼び出して、IEでDOMを操作して情報を収集するという本です。この本の存在を最近まで知らなかったのですが、私が初めてスクレイピングをした時と同じやり方で感動しました。人にスクレイピングを勧めるにも、プログラムの実行環境をどうするか悩ましい問題です。オフィスワーカーの共通プラットフォームであるエクセルを使うのは、いい選択肢と思います。(IE+DOM操作は面倒くさいですが)

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

1 初めてのIE制御
2 理解しておくべき基礎知識
3 IEの動作や外観を制御する
4 HTML画面部品の制御
5 Webサイトを自動操作する
6 Webページ解析のテクニック

Rubyによるクローラー開発技法



 せっかくなので、自分が書いた本も紹介させてもらいます。Rubyによるクローラー開発技法は、私が初めて書いた本です。クローラー本ですが、その周辺技術のHTMLのxPath,CSSセレクタ・正規表現の考え方の他、サーバサイドのことまで書いています。2章以降を担当し400ページ近く書きました。今目次を見返しても、いろいろ書いたなぁと思えるくらい多岐に渡っています。またサンプルも多いので、クローラー/スクレイピングをしようとした際は、たいてい似たパターンの書き方を見つけることが出来るのではないでしょうか。
 おかげ様で発売から2年近く経っても売れ続けています。改訂版を出すとしたら、サーバサイドの部分をAWS Lambda使うパターンを足したいなぁと思います。

Chapter 1 10分クローラーの作成
 1-1 イントロダクション
 1-2 クローラー 「GNU Wget」
 1-3 クローラーを作るにあたってのRubyの基礎
 1-4 Rubyでテストサーバを立てる
 1-5 超簡単! 10分で作るクローラー
 1-6 クローラーを拡張する
Chapter 2 クローラー作成の基礎
 2-1 クローラーの目的と構造
 2-2 Anemoneを利用する
 2-3 Anemoneのインストール(Windows編)
 2-4 Anemoneのインストール(Mac編)
 2-5 基本的なクローラーを作成する
 2-6 クローリングができない場合の対処法
 2-7 行儀のよいクローラーを作るには
 2-8 ブラウザタイプのクローラー
Chapter 3 収集したデータを分析する
 3-1 収集したデータを分析する
 3-2 HTML解析と正規表現
 3-3 文字コードの対処法
 3-4 RSSの解析
 3-5 HTMLの解析
 3-6 自然言語を使った日本語の処理
Chapter 4 高度な利用方法
 4-1 データの保存方法
 4-2 クローラーの開発とデバッグ方法
 4-3 クローリングとスクレイピングの分離
 4-4 クローラーを効率的に動かすには
 4-5 Anemoneのオプション一覧
 4-6 APIを利用した収集
Chapter 5 目的別クローラーの作成
 5-1 Google の検索結果を取得する
 5-2 ブログへのクローリング
 5-3 Amazonのデータを取得する
 5-4 Twitter のデータ収集
 5-5 Facebookへのクローリング
 5-6 画像を収集する
 5-7 YouTube から動画を収集する
 5-8 iTunes Store の順位を取得する
 5-9 Google Playの順位を取得する
 5-10 SEOに役立てる
 5-11 Wikipediaのデータを活用する
 5-12 キーワードを収集する
 5-13 流行をキャッチする
 5-14 企業株価情報を収集する
 5-15 為替情報金融指標を収集する
 5-16 郵便番号と緯度経度情報を取得する
 5-17 新刊情報を収集する
 5-18 荷物を追跡する
 5-19 不動産情報を取得する
 5-20 官公庁のオープンデータを活用する
 5-21 新聞の見出しを集める
Chapter 6 クローラーの運用
 6-1 サーバサイドで動かす
 6-2 定期的にデータを収集する
 6-3 収集結果をメールで自動送信する
 6-4 クラウドを活用する
 6-5 さらなる高速化の手法
 6-6 変化に対応する
 6-7 クローラーとそれに付随する技術

感想



 Spidering Hacksからの空白の10年。主要なスクレイピング言語でクローラー/スクレイピング本が揃ったということは結構幸せなことではないかなと思っています。あと1つ足りないと思っているものがあるので、どこかのタイミングで出してみようかなとも思います。

完全版!!ジュンク堂書店池袋本店2015年コンピュータ書売上げランキング

 2015年度のジュンク堂書店池袋本店のコンピュータ書の売り上げランキング。作って公開するの忘れてました。座談会レポートで一部公開されていますが、全部版です。

2015年4月ランキング



 話題になった関数型プログラミング本。情熱は凄い。

4月順位 タイトル 書影リンク
1 スッキリわかるJava入門 第2版 スッキリわかるJava入門 第2版 (スッキリシリーズ)
2 たった一日で即戦力になるExcelの教科書 たった1日で即戦力になるExcelの教科書
3 SQL実践入門 SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)
4 機械学習プロフェッショナルシリーズ 深層学習 深層学習 (機械学習プロフェッショナルシリーズ)
5 人工知能は人間を超えるか 人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書)
6 関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間 関数型プログラミングに目覚めた!IQ145の女子高校生の先輩から受けた特訓5日間
7 Android Studioではじめる簡単Androidアプリ開発 Android Studioではじめる 簡単Androidアプリ開発
8 理論から学ぶデータベース実践入門 理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL (WEB+DB PRESS plus)
9 Pythonエンジニア養生読本 Pythonエンジニア養成読本[いまどきの開発ノウハウ満載!] (Software Design plus)
10 リーダブルコード リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
11 はじめてのiOSアプリ開発 Swift対応版 TECHNICAL MASTERはじめてのiOSアプリ開発Swift対応版
12 機械学習プロフェッショナルシリーズ オンライン機械学習 オンライン機械学習 (機械学習プロフェッショナルシリーズ)
13 スッキリわかるJava入門 実践編 第2版 スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)
14 Photoshopペイントメソッド Photoshopペイントメソッド
15 入門React 入門 React ―コンポーネントベースのWebフロントエンド開発
16 やさしいJava 第5版 やさしいJava 第5版 (「やさしい」シリーズ)
17 機械学習プロフェッショナルシリーズ 機械学習のための確率と統計 機械学習のための確率と統計 (機械学習プロフェッショナルシリーズ)
18 スッキリわかるサーブレット&JSP入門 スッキリわかる サーブレット&JSP入門 (スッキリシリーズ)
19 Javaパフォーマンス Javaパフォーマンス
20 マスタリングTCP/IP 入門編 第5版 マスタリングTCP/IP 入門編 第5版

2015年5月ランキング



 シェル本というジャンル、根強い人気。

5月順位 タイトル 書影リンク
1 たった一日で即戦力になるExcelの教科書 たった1日で即戦力になるExcelの教科書
2 人工知能は人間を超えるか 人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書)
3 スッキリわかるJava入門 第2版 スッキリわかるJava入門 第2版 (スッキリシリーズ)
4 リーダブルコード リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
5 機械学習プロフェッショナルシリーズ 深層学習 深層学習 (機械学習プロフェッショナルシリーズ)
6 デジタル原型師養成講座 デジタル原型師養成講座 プロとして通用するフィギュア作成技法
7 シェルプログラミング実用テクニック シェルプログラミング実用テクニック (Software Design plus)
8 誰のためのデザイン? 増補・改訂版 誰のためのデザイン? 増補・改訂版 ―認知科学者のデザイン原論
9 HTML5&CSS3デザインブック HTML5&CSS3デザインブック (ステップバイステップ形式でマスターできる)
10 その数式、プログラムできますか? その数式、プログラムできますか?
11 わかりやすいJavaEE ウェブシステム わかりやすいJavaEEウェブシステム入門
12 インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門 インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門
13 本格ビジネスサイトを作りながら学ぶWordPressの教科書 Ver.4.X対応版 本格ビジネスサイトを作りながら学ぶ WordPressの教科書 Ver.4.x対応版
14 スッキリわかるサーブレット&JSP入門 スッキリわかる サーブレット&JSP入門 (スッキリシリーズ)
15 スッキリわかるJava入門 実践編 第2版 スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)
16 機械学習プロフェッショナルシリーズ オンライン機械学習 オンライン機械学習 (機械学習プロフェッショナルシリーズ)
17 Pythonエンジニア養生読本 Pythonエンジニア養成読本[いまどきの開発ノウハウ満載!] (Software Design plus)
18 現場のプロが教えるHTML+CSSコーディングの最新常識 現場のプロが教えるHTML+CSSコーディングの最新常識 知らないと困るWebデザインの新ルール4
19 図解 コレ1枚でわかる最新ITトレンド 【図解】コレ1枚でわかる最新ITトレンド
20 ハッカーの学校 ハッカーの学校

2015年6月ランキング



 エクストリームプログラミングの改訂版は嬉しかった

6月順位 タイトル 書影リンク
1 Dockerエキスパート養成読本 Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)
2 たった一日で即戦力になるExcelの教科書 たった1日で即戦力になるExcelの教科書
3 人工知能は人間を超えるか 人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書)
4 エクストリームプログラミング エクストリームプログラミング
5 スッキリわかるJava入門 第2版 スッキリわかるJava入門 第2版 (スッキリシリーズ)
6 10年戦えるデータ分析入門 10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)
7 リーダブルコード リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
8 インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門 インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門
9 JavaScript入門教室 第3版 10日でおぼえるJavaScript入門教室 第3版 (10日でおぼえるシリーズ)
10 人工知能 人類最悪にして最後の発明 人工知能 人類最悪にして最後の発明
11 誰のためのデザイン? 増補・改訂版 誰のためのデザイン? 増補・改訂版 ―認知科学者のデザイン原論
12 マスタリングTCP/IP 入門編 第5版 マスタリングTCP/IP 入門編 第5版
13 Jenkins実践入門 改訂版 改訂新版Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
14 スッキリわかるサーブレット&JSP入門 スッキリわかる サーブレット&JSP入門 (スッキリシリーズ)
15 HTML5&CSS3デザインブック HTML5&CSS3デザインブック (ステップバイステップ形式でマスターできる)
16 Fireworksレッスンブック CS6 Fireworksレッスンブック Fireworks CS6/CS5/CS4対応 (-)
17 機械学習プロフェッショナルシリーズ 深層学習 深層学習 (機械学習プロフェッショナルシリーズ)
18 伝わるデザインの基本 伝わるデザインの基本 よい資料を作るためのレイアウトのルール
19 ハッカーの学校 ハッカーの学校
20 シェルプログラミング実用テクニック シェルプログラミング実用テクニック (Software Design plus)

2015年7月ランキング



 人工知能本で上位独占

7月順位 タイトル 書影リンク
1 人工知能は人間を超えるか 人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書)
2 人工知能 人類最悪にして最後の発明 人工知能 人類最悪にして最後の発明
3 リーダブルコード リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
4 たった一日で即戦力になるExcelの教科書 たった1日で即戦力になるExcelの教科書
5 スッキリわかるJava入門 第2版 スッキリわかるJava入門 第2版 (スッキリシリーズ)
6 機械学習プロフェッショナルシリーズ 深層学習 深層学習 (機械学習プロフェッショナルシリーズ)
7 おうちで学べるセキュリティのきほん おうちで学べるセキュリティのきほん
8 エクストリームプログラミング エクストリームプログラミング
9 データ解析の実務プロセス入門 データ解析の実務プロセス入門
10 Dockerエキスパート養成読本 Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)
11 スッキリわかるJava入門 実践編 第2版 スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)
12 Unityで神になる本。 Unityで神になる本。
13 HTML5&CSS3デザインブック HTML5&CSS3デザインブック (ステップバイステップ形式でマスターできる)
14 10年戦えるデータ分析入門 10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)
15 本格ビジネスサイトを作りながら学ぶWordPressの教科書 Ver.4.X対応版 本格ビジネスサイトを作りながら学ぶ WordPressの教科書 Ver.4.x対応版
16 CSS3開発者ガイド 第2版 CSS3開発者ガイド 第2版 ―モダンWebデザインのスタイル設計
17 スクラム 仕事が4倍速くなる”世界標準”のチーム戦術 スクラム 仕事が4倍速くなる“世界標準”のチーム戦術
18 伝わるデザインの基本 伝わるデザインの基本 よい資料を作るためのレイアウトのルール
19 インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門 インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門
20 いちばんやさしいWordPressの教本 4.x対応 第2版 いちばんやさしいWordPressの教本 人気講師が教える本格Webサイトの作り方 第2版 WordPress 4.x対応 (「いちばんやさしい教本」シリーズ)

2015年8月ランキング



 暗号化本が一番売れているということに、ちょっと希望を見出した

8月順位 タイトル 書影リンク
1 暗号技術入門 第3版 暗号技術入門 第3版 秘密の国のアリス
2 最速の仕事術はプログラマーが知っている 最速の仕事術はプログラマーが知っている
3 人工知能は人間を超えるか 人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書)
4 文系で知っておきたいプログラミングとプログラマーのこと 文系でも知っておきたいプログラミングとプログラマーのこと
5 よくわかるHTML5+CSS3の教科書 第2版 よくわかるHTML5+CSS3の教科書【第2版】
6 たった一日で即戦力になるExcelの教科書 たった1日で即戦力になるExcelの教科書
7 機械学習プロフェッショナルシリーズ 深層学習 深層学習 (機械学習プロフェッショナルシリーズ)
8 人工知能 人類最悪にして最後の発明 人工知能 人類最悪にして最後の発明
9 スッキリわかるJava入門 第2版 スッキリわかるJava入門 第2版 (スッキリシリーズ)
10 Unity5 3D/2Dゲーム開発実践入門 Unity5 3D/2Dゲーム開発実践入門 作りながら覚えるスマートフォンゲーム開発
11 リーダブルコード リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
12 ヘルシープログラマ ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hack
13 おうちで学べるセキュリティのきほん おうちで学べるセキュリティのきほん
14 Unreal Engine 4で極めるゲーム開発 Unreal Engine 4で極めるゲーム開発:サンプルデータと動画で学ぶUE4ゲーム制作プロジェクト
15 機械学習プロフェッショナルシリーズ 確率的最適化 確率的最適化 (機械学習プロフェッショナルシリーズ)
16 機械学習プロフェッショナルシリーズ 異常検知と変化検知 異常検知と変化検知 (機械学習プロフェッショナルシリーズ)
17 ハッカーの学校 ハッカーの学校
18 ファンタジー背景画 パーツ編 ファンタジー背景画 パーツ編
19 マスタリングTCP/IP 入門編 第5版 マスタリングTCP/IP 入門編 第5版
20 HTML5&CSS3デザインブック HTML5&CSS3デザインブック (ステップバイステップ形式でマスターできる)

2015年9月ランキング



 Node.jsのクローラー本登場。自著のライバルだけど、いい本だと思う。

9月順位 タイトル 書影リンク
1[http://amzn.to/1W5cXaK:title= 暗号技術入門 第3版] 暗号技術入門 第3版 秘密の国のアリス
2 データサイエンティスト養成読本 機械学習入門編 データサイエンティスト養成読本 機械学習入門編 (Software Design plus)
3 人工知能は人間を超えるか 人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書)
4 JS+Node.jsによるWebクローラー/ネットエージェント[開発テクニック] JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック
5 リーダブルコード リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
6 スッキリわかるJava入門 第2版 スッキリわかるJava入門 第2版 (スッキリシリーズ)
7 Effective Modern C++ Effective Modern C++ ―C++11/14プログラムを進化させる42項目
8 あなたの知らない超絶技巧プログラミングの世界 あなたの知らない超絶技巧プログラミングの世界
9 最速の仕事術はプログラマーが知っている 最速の仕事術はプログラマーが知っている
10 ゲームグラフィックス 2015 ゲームグラフィックス 2015 CGWORLD特別編集版
11 たった一日で即戦力になるExcelの教科書 たった1日で即戦力になるExcelの教科書
12 人工知能 人類最悪にして最後の発明 人工知能 人類最悪にして最後の発明
13 機械学習プロフェッショナルシリーズ 深層学習 深層学習 (機械学習プロフェッショナルシリーズ)
14 たのしいインフラの歩き方 たのしいインフラの歩き方
15 ネットワークエンジニアの教科書 ネットワークエンジニアの教科書
16 人工知能入門 人工知能入門
17 PHPはどのように動くのか? PHPはどのように動くのか ~PHPコアから読み解く仕組みと定石
18 Unity5 3D/2Dゲーム開発実践入門 Unity5 3D/2Dゲーム開発実践入門 作りながら覚えるスマートフォンゲーム開発
19 HTML5&CSS3デザインブック HTML5&CSS3デザインブック (ステップバイステップ形式でマスターできる)
20 機械学習プロフェッショナルシリーズ 異常検知と変化検知 異常検知と変化検知 (機械学習プロフェッショナルシリーズ)

2015年10月ランキング



 岩波データサイエンス!!

10月順位 タイトル 書影リンク
1 岩波データサイエンス Vol.1 岩波データサイエンス Vol.1
2 PHPはどのように動くのか? PHPはどのように動くのか ~PHPコアから読み解く仕組みと定石
3 暗号技術入門 第3版 暗号技術入門 第3版 秘密の国のアリス
4 人工知能は人間を超えるか 人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書)
5 たった一日で即戦力になるExcelの教科書 たった1日で即戦力になるExcelの教科書
6 スッキリわかるJava入門 第2版 スッキリわかるJava入門 第2版 (スッキリシリーズ)
7 プログラマ脳を鍛える数学パズル プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問
8 データサイエンティスト養成読本 機械学習入門編 データサイエンティスト養成読本 機械学習入門編 (Software Design plus)
9 機械学習プロフェッショナルシリーズ 深層学習 深層学習 (機械学習プロフェッショナルシリーズ)
10 Docker実践入門 Docker実践入門――Linuxコンテナ技術の基礎から応用まで (Software Design plus)
11 人工知能 人類最悪にして最後の発明 人工知能 人類最悪にして最後の発明
12 ITエンジニアのための機械学習理論入門 ITエンジニアのための機械学習理論入門
13 メタプログラミングRuby 第2版 メタプログラミングRuby 第2版
14 リーダブルコード リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
15 サイバーセキュリティプログラミング サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考
16 JS+Node.jsによるWebクローラー/ネットエージェント[開発テクニック] JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック
17 セキュリティコンテストチャレンジブック セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-
18 スッキリわかるJava入門 実践編 第2版 スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)
19 さよなら、インタフェース さよなら、インタフェース -脱「画面」の思考法
20 Pythonライブラリ厳選レシピ Python ライブラリ厳選レシピ

2015年11月ランキング



 Amazon Web Servers実践入門。いい本だよ!!

11月順位 タイトル 書影リンク
1 人工知能は人間を超えるか 人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書)
2 Amazon Web Servers実践入門 Amazon Web Services実践入門 (WEB+DB PRESS plus)
3 深層学習 深層学習 Deep Learning (監修:人工知能学会)
4 岩波データサイエンス Vol.1 岩波データサイエンス Vol.1
5 データサイエンティスト養成読本 機械学習入門編 データサイエンティスト養成読本 機械学習入門編 (Software Design plus)
6 たった一日で即戦力になるExcelの教科書 たった1日で即戦力になるExcelの教科書
7 ITエンジニアのための機械学習理論入門 ITエンジニアのための機械学習理論入門
8 暗号技術入門 第3版 暗号技術入門 第3版 秘密の国のアリス
9 進化計算と深層学習 進化計算と深層学習 -創発する知能―
10 プログラマ脳を鍛える数学パズル プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問
11 サイバーセキュリティプログラミング サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考
12 機械学習プロフェッショナルシリーズ 深層学習 深層学習 (機械学習プロフェッショナルシリーズ)
13 徳丸浩のWebセキュリティ教室 徳丸浩のWebセキュリティ教室
14 ハッカーの学校 ハッカーの学校
15 SwiftではじめるiPhoneアプリ開発の教科書 Swift2&Xcode7対応 Swiftではじめる iPhoneアプリ開発の教科書 【Swift 2&Xcode 7対応】 (教科書シリーズ)
16 スッキリわかるJava入門 第2版 スッキリわかるJava入門 第2版 (スッキリシリーズ)
17 HTML5&CSS3デザインブック HTML5&CSS3デザインブック (ステップバイステップ形式でマスターできる)
18 ビジュアル版 コンピューター&テクノロジー解体新書 コンピューター&テクノロジー解体新書 ビジュアル版
19 HTML5&CSS3モダンコーディング HTML5/CSS3モダンコーディング フロントエンドエンジニアが教える3つの本格レイアウト スタンダード・グリッド・シングルページレイアウトの作り方 (WEB Engineer’s Books)
20 リーダブルコード リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

2015年12月ランキング



 API本は、もう少し色々と出てきて欲しい。

12月順位 タイトル 書影リンク
1 APIデザインケーススタディ APIデザインケーススタディ ~Rubyの実例から学ぶ。問題に即したデザインと普遍の考え方 (WEB+DB PRESS plus)
2 メタプログラミングRuby 第2版 メタプログラミングRuby 第2版
3 人工知能は人間を超えるか 人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書)
4 スッキリわかるJava入門 第2版 スッキリわかるJava入門 第2版 (スッキリシリーズ)
5 入門Python3 入門 Python 3
6 ビジュアル版 コンピューター&テクノロジー解体新書 コンピューター&テクノロジー解体新書 ビジュアル版
7 たった一日で即戦力になるExcelの教科書 たった1日で即戦力になるExcelの教科書
8 暗号技術入門 第3版 暗号技術入門 第3版 秘密の国のアリス
9 プログラマ脳を鍛える数学パズル プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問
10 アニメCGの現場 2015 アニメCGの現場 2015 CGWORLD特別編集版 (Works books)
11 深層学習 深層学習 Deep Learning (監修:人工知能学会)
12 あなたの知らない超絶技巧プログラミングの世界 あなたの知らない超絶技巧プログラミングの世界
13 Amazon Web Servers実践入門 Amazon Web Services実践入門 (WEB+DB PRESS plus)
14 インフラエンジニア教本 Volume2 インフラエンジニア教本2――システム管理・構築技術解説 (Software Design別冊)
15 インフラ/ネットワークエンジニアのためのネットワーク・デザインパターン インフラ/ネットワークエンジニアのためのネットワーク・デザインパターン
16 リーダブルコード リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
17 岩波データサイエンス Vol.1 岩波データサイエンス Vol.1
18 データサイエンティスト養成読本 機械学習入門編 データサイエンティスト養成読本 機械学習入門編 (Software Design plus)
19 ITエンジニアのための機械学習理論入門 ITエンジニアのための機械学習理論入門
20 ランディングページ・デザインメソッド ランディングページ・デザインメソッド WEB制作のプロが教えるLPの考え方、設計、コーディング、コンテンツ制作ガイド

感想



 今年は、ランキングに載れるように頑張ります。
一方で、技術書の市場の大きさが決まっているなかで、技術の細分化で1冊あたりの売上が下がっている現状。
出版社としても著者としても辛いんだろうなぁと思います。

cheerio-httpcliを使って、Amazonのほしい物リスト(Wish List)から商品コード(asin)を抜き出す

 40手前の手習いで、cheerio-httpcliの使い方学習中です。
サンプルコードを読んで動作はなんとなく解ったので、次は欲しいデータを取得することで習熟していこうと思います。今回は、公開されたAmazonの欲しい物リスト(wish list)から、Amazonの商品管理コードであるasinを抜き出してみます。


欲しい物リスト(ウィッシュリスト)の構造



 ウィッシュリストは、個々に一意のIDが振られているので(公開設定されているのであれば)ログイン不要で取得できます。例えば、私のウィッシュリストは下記のようなURLになっています。最後のランダムな英数字の部分が、ウィッシュリストのIDです。

http://www.amazon.co.jp/gp/registry/wishlist/3G4653SB32HMZ/

 ウィッシュリストの中身に目を向けてみると、1ページあたり25件づつ表示されます。リストが25件以上ある場合は、ページ番号のボタンで表示されジャンプすることができます。そして最終ページ以外は、「次へ」のボタンがクリックできるようになっています。
f:id:dkfj:20160518074522p:plainf:id:dkfj:20160518074531p:plain

 今回は、一覧中からリンクのaタグを取得し、その中のhref属性からasin、title属性からタイトルを取得します。そして、次のページがある場合は再帰的に取得するようにしてみます。
 一覧中のaタグは複数あるのですが、h5タグの下のclassがa-link-normalのaタグを取るという指定の仕方が良さそうです。
f:id:dkfj:20160518075615p:plain
 「次のページ」は、xPathを取得すると、このような構造になっています。

//*[@id="wishlistPagination"]/span/div/ul/li[7]/a

f:id:dkfj:20160518075626p:plain
id:wishlistPaginationから辿って、直前のliタグがa-lastというクラスを持っているaタグを取ってくるというやり方でできそうです。

cheerio-httpcliを使って、欲しい物リストを取得するコード



 下調べが出来たので、cheerio-httpcliを使って取得するコードを書いてみます。ここまで調べておけば、要素の取得は簡単にできます。

'use strict';

/**
 * Amazonのほしい物リスト(公開)からASINを取得
 *
 */


var client = require('cheerio-httpcli');

var base = 'http://www.amazon.co.jp';
var url = 'http://www.amazon.co.jp/gp/registry/wishlist/3G4653SB32HMZ/';

function getWishList(url) {
  //console.log('getWishList: '+url);
  client.fetch(url).then(function (result) {
    var $ = result.$;
    $('h5 .a-link-normal').each(function () {
      var element = $(this);
      var href = element.attr('href');
      var title = element.attr('title');
      var array = href.match(/(\/dp\/+)(.{10})/);
      var asin = array[2];
      if (asin) console.log(asin);
    });
    var next = hasNextPage($);
    if (next)  getWishList(base+next);
  })
};

function hasNextPage($){
  //console.log($('div[id=wishlistPagination] .a-last a').attr('href'));
  return $('div[id=wishlistPagination] .a-last a').attr('href');
};
getWishList(url);

 しかしまぁ、JavaScriptっぽい書き方でないので、皆さま是非添削してこう書くのだよと教えてください。

Node.jsのWebスクレイピングモジュール 『cheerio-httpcli』のサンプルソースを読み解く

 不定期連載、Node.jsのcheerio-httpcliによるWebスクレイピング講座です。今回は具体的なcheerio-httpcliの使い方をみていきましょう。cheerio-httpcliが公開されてるGithubリポジトリには、豊富なサンプルがあります。サンプル例としては下記の通りで2016年5月現在で11本もあり、これを読んでると一通りの使い方が解ってきます。ということで、サンプル読みながら紹介してみます。

2ちゃんねる検索サンプル



 1つ目のサンプルは、2ちゃんねる検索のサンプルです。特定のワードを入れて、その検索結果を表示するという形です。

まず2ちゃんねるの検索部分がどうなっているかです。サイト上は、下記のとおりです。シンプルですね。
f:id:dkfj:20160514164719p:plain

 HTMLのソースは次のような形になっています。

<div style="display: inline; margin-left: 2.0em;">
	<form method="get" action="http://find.2ch.net/" style="display: inline;">
		<input type="text" name="q" value="" style="width: 16em; height: 1.00em;" id="fulltext-keyword">
		<input type="hidden" name="ita" value="">
		<button type="submit" value="">【新】全文検索</button>
	</form>
	<form method="get" action="http://dig.2ch.net/" accept-charset="UTF-8" style="display: inline;">
		<input type="text" name="keywords" value="" style="width: 16em; height: 1.00em; display: none;" id="thread-keyword">
		<input type="hidden" name="Bbs" value="">
		<button type="submit" value="">スレタイ検索</button>
	</form>
</div>

※見辛いので、適当にインデントをつけました。

 それでは、cheerio-httpcliのソースを見てみましょう。まず検索部分です。

var word = 'ぬるぽ';


var client = require('../index');

client.fetch('http://www.2ch.net/')
.then(function (result) {
  return result.$('form').eq(0).submit({
    q: word
  });
})

http://www.2ch.net/のフォームの一つ目に、『ぬるぽ』という単語を設定してサブミットボタンを押しています。HTMLのソースをみると、【新】全文検索とスレタイ検索があるので、ここで利用しているのは【新】全文検索の方ですね。検索ワードを入れるinput type="text"の名前が、qなのでそこにwordを入れています。なお、requireの部分は、Git等でソースとサンプルをまとめてダウンロードして展開した以外は、下記のように指定します。

var client = require('cheerio-httpcli');

次に取得した結果に対する処理です。先に実行結果をみてみましょう。検索結果の中から、title,url,timestampをJSON形式で出力しています。

[ { title: '【DMM/角川】艦隊これくしょん〜艦これ〜6208隻目 [無断転載禁止]©2ch.net',
    url: 'http://wc2014.2ch.net/test/read.cgi/gameswf/1463111858/294',
    timestamp: '2016-05-13 21:36:28.08' },

〜中略

  { title: '【テレ玉】TVSアニメ専門スレ45【テレビ埼玉】 [転載禁止]©2ch.net',
    url: 'http://yomogi.2ch.net/test/read.cgi/asaloon/1443865196/142',
    timestamp: '2016-05-06 21:01:38.4' },
  { title: '歴史秘話ヒストリア「愛と悲しみの大奥物語」★2©2ch.net',
    url: 'http://nhk.2ch.net/test/read.cgi/livenhk/1462533366/167',
    timestamp: '2016-05-06 20:35:22.01' } ]
終了します

 これを出力しているコードは下記のとおりです。
htmlのソースと比べると、classがboxのdivタグの中から、aタグを抽出しているようです。

f:id:dkfj:20160514215641p:plain

.then(function (result) {
  var $ = result.$;
  var results = [];
  $('.box').each(function () {
    var $a = $(this).find('a').eq(0);
    results.push({
      title: $a.text().trim(),
      url: $a.attr('href'),
      timestamp: $(this).find('.timestamp').text().trim()
    });
  });
  console.info(results);
})

 aタグの抽出の部分が、黒魔術に見えます。

var $a = $(this).find('a').eq(0);

findでaタグを指定して、その後のeqで絞り込んでいます。cheerioのメソッド説明によると、eqは下記のとおりです。

Reduce the set of matched elements to the one at the specified index. Use .eq(-i) to count backwards from the last selected element.

マッチした一つ目の要素のみ取得しているということのようです。使いこなすと便利そうですね。

 2ちゃんねる検索のサンプルで、検索ワードワードを入れて結果一覧から取得するというスクレイピングの基本的な動作が解りました。特に検索結果からの抽出の部分は参考になります。

要素の多段絞込



 後はサンプルの中から、使いそうな記述の仕方をピックアップします。まず、要素の絞込の仕方です。これは、例えば、特定のタグの下のものを選んで、再度絞り込むというやり方です。一度で抽出するという方法もありますが、2回に別けた方がよい場合もあります。ということで、sync.jsの例を見ていきましょう。sync.jsは同期リクエストのサンプルですが、要素の絞込があったのでピックアップします。

$('.b_algo').each(function () {
    // 各検索結果のタイトル部分とURL、概要を取得
    var $h2 = $(this).find('h2');
    var url = $h2.find('a').attr('href');
〜省略〜

 ソースを見ると解るのですが、まずh2タグを抽出し変数に代入しています。次に、代入した変数から再度絞り込んでいます。こう書くと解りやすいですね。この辺りの書き方が、スクレイピングしていて個々人の癖が出る部分だと思います。

不要な情報の削除



 次はタグの中から不要な情報の削除です。私は、あまりこういった方法を使わないのですが、読んでて成る程なぁと思いました。上手く使えば、分岐処理とかが不要になるので効率的になります。この例は、hatena-keyword.jsというはてなのキーワード抽出のサンプルにあります。

var $ = result.$;
  $('#updatekeywords ul li .name').each(function () {
    // NEW!は邪魔なので削除
    $('.new', $(this)).remove();
    console.info('* ' + $(this).text());
  });

Cookie情報の取得



 ログイン後のセッションを維持するために、Cookieを使う場合が多いです。スクレイピングで、ログイン後のページを参照する場合は、ログインしてCookieを取得するといったことが必要です。そのサンプルも、facebook.jsにあります。

client.fetch('http://www.facebook.com/')
.then(function (result) {
  console.info('ログインフォームを送信します');
  return result.$('#login_form').submit({
    email: username,
    pass: password
  });
})
.then(function (result) {
  console.info('クッキー', result.response.cookies);
  console.info('ユーザー名を取得します');
  console.info(result.$('._2dpb').text());
})

感想



 cheerio-httpcliは、サンプルが充実しています。どのサンプルもシンプルでありながら、スクレイピングに必要な要素が散りばめられています。今回じっくりと読むことで、だいたいの使い方が理解できました。ということで、ぜひ読んで動かしてみてください。

シリーズ目次:
Node.jsでスクレイピングするならば
AWS Lambdaでcheerio-httpcliを実行する
Node.jsのWebスクレイピングモジュール 『cheerio-httpcli』の使い方その1 cheerioでhtmlの要素指定

See Also:
『Rubyによるクローラー開発技法』を書きました
アプリケーションエンジニア向けのAWS本を書きました
『Amazon Web Services パターン別構築・運用ガイド』を書きました