プログラマでありたい

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

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

 ふと気がついたのですが、ここ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つ足りないと思っているものがあるので、どこかのタイミングで出してみようかなとも思います。