翔泳社の公式通販SEshopは全国送料無料!
ヘルプ 新規会員登録 ログイン
SEshop

クローリングハック あらゆるWebサイトをクロールするための実践テクニック

竹添 直樹(著) , 島本 多可子(著) , 田所 駿佑(著) , 萩野 貴拓(著) , 川上 桃子(著)

商品番号
150510
販売状態
品切れ
納品形態
宅配便にてお届け
発売日
2017年09月14日
出荷開始日
2017年09月15日
ISBN
9784798150512
判型
A5
ページ数
336
キーワード
プログラミング  開発  Web制作

2,948円(税込)(本体2,680円+税10%)
送料無料

268pt (10%)
ポイントの使い方はこちら

初回購入から使えるポイント500円分プレゼント

現在、本商品は販売しておりません。 電子書籍はこちら

※1点の税込金額となります。 複数の商品をご購入いただいた場合のお支払金額は、 単品の税込金額の合計額とは異なる場合がございますので、予めご了承ください。

Webアプリケーション、Webサービスを開発・運用する
エンジニアは、HTML/HTTPやWebサーバなどWeb技術の
仕組みや基礎的な知識をおさえておかなければなりません。

本書では、実サービスでの大規模なWebクローラーの
開発・運用経験をもとに、クローラーを支える、HTTP、
文字コード、HTML、認証、Ajax/JSONなど、Webエンジニアが
おさえておくべきポイントやテクニックを学びます。

クローラーから見たWebサイトの仕組みとその実情に加えて、
現実に即した実践的かつ効率的なクローリングの方法論に
ついても解説します。

○実例をもとにHTTPやHTMLなどWebの仕組みを深く知ることができる
○大規模なクローラーの開発・運用ノウハウを知ることができる
○Webサイトの運営者(クロールされる側)もクローラーに関する知見を得ることができる

【対象読者】
本書はWebクローラーを題材としていますが、クローリングのために
必要なWeb技術の解説に重点を置いており、
主に次のような方々に読んでいただけるよう執筆しました。
● 正しい知識を身につけたいWeb開発者
● クローラビリティの高いWebサイトを作成したいWebサイト運営者

また、HTMLやCSSなど、Webサイトの作成に関わる最低限の知識、
およびサンプルコードを読解するためのプログラミングに関する基礎知識を
前提としています。サンプルコードはJavaで記述していますが、
Java固有のセマンティクスやプログラミングテクニックは可能な限り
避けていますので、Javaに対する深い理解は必要ありません。

■Chapter 1 クローラーを支える技術
1-1 そもそもクローラーってなに?
1-2 クローラーの仕組み
 クローリング
 スクレイピング
 データの保存
1-3 クローラーとWeb技術
 Webクローラーが守るべきルール
   クロール先のサーバに負荷をかけすぎない
   取得したコンテンツの著作権を守る
   拒否されたWebサイトやWebページはクロールしない
 クローラーが直面する課題
1-4 クローラーを作ってみよう
 Javaによるシンプルなクローラーの実装
   Jsoup
   crawler4j
 クローリング・スクレイピング用のサービスやツールを利用する
  import.io
  scraper
1-5 開発をサポートするツール
 curl
  リクエストを送信する
  HTTPヘッダを表示する
  リクエストヘッダを指定する
  リクエストボディで送信する内容を指定する
 ブラウザの開発者向けツール

■Chapter 2 HTTPをより深く理解する
2-1 HTTPの概要
 HTTPの通信内容を覗いてみる
2-2 HTTPメソッドの使い分け
 一部のメソッドがサポートされていない場合がある
 メソッドの使い方が適切ではない場合がある
   GETではなくPOSTメソッドで画面遷移している
   GETメソッドで更新処理をしている
 URLエンコードの方式の違いによるトラブル
   URLの構造
   URLエンコード
  半角スペースのエンコード方法の違い
2-3 信用できないレスポンスステータス
 ステータスコードに応じて適切な処理をする
 エラーが発生しているのに200が返ってくる
 ページが存在しない場合にリダイレクトされる
 そもそもサーバに接続できない
 サーバエラー時の一般的な対処法
   400 Bad Request
   401 Unauthrorized
   403 Forbidden
   404 Not Found
   405 Method Not Allowed
   406 Not Acceptable
   408 Request Timeout
   500 Internal Server Error
   501 Not Implemented
   502 Bad Gateway
   503 Service Unavailable
   504 Gateway Timeout
 リダイレクトの微妙な意味の違い
   一時的な移動と恒久的な移動
   メソッドの変更が許されているかどうか
   クローラーでのリダイレクトの扱い方
   metaタグによるリダイレクト
   canonicalが示す本来のURL
2-4 HTTPヘッダの調整
 クローラーのユーザーエージェント
   サーバサイドでクローラーかどうかを判定する
 クッキーを引き継がないとクロールできないWebサイト
   クッキーを引き継ぐ
 国際化されたWebサイトをクロールする
   地域や言語ごとに異なるドメインやURLで提供されている場合
   Accept-Languageヘッダで切り替えられている場合
2-5 プロキシ経由でのクロール
 プロキシ使用時のHTTP通信の内容
 クローラーでプロキシを使用する
2-6 SSL通信時のエラー
 SSLのバージョン
 SSL対応サイトのクロール
 JavaのAESのキー長の問題
2-7 HTTP/2
 JavaでのHTTP/2の取り扱い
2-8 まとめ

■Chapter 3 文字化けと戦う
3-1 クローリングと文字コード
3-2 どうして文字は化けるのか?
 コンピュータと文字
 文字化けとマルチバイト文字
3-3 クライアントとサーバと文字化け
 文字コードはどこで化ける?
   クライアント・サーバ間
   Content-Typeヘッダで文字コードが指定されている場合
   metaタグで文字コードが指定されている場合
 アプリケーション・データベース間
 テキストファイルの読み書き
3-4 文字コードを適切に扱う
 クローリングと文字コード
 インデキシングと文字コード
   正規化
   危険なデータは消毒(サニタイズ)!
3-5 代表的な文字コード
 UTF-8
 Shift_JIS
 EUC-JP
 ISO-2022-JP
3-6 文字コードにまつわる落とし穴
 文字コード名を信じるな
   原因
   対策
 Shift_JISじゃないShift_JIS
   原因
   対策
 データベースと寿司の受難①――消える寿司
   原因
   対策
 データベースと寿司の受難②――絵文字で検索できない問題
   原因
   対策
 嘘みたいなフォントの話
   原因
   対策
 トラブルシューティングのためのTips
   テキストエンコーディング――Google Chromeでエンコーディングを切り替える拡張機能
   hexdump――16進ダンプでバイト列を確認する
   バイナリエディタ――ファイルを16進ダンプする
3-7 文字コードを推定するには?
 juniversalchardet
 ICU4J
 Java以外の言語での実装
 文字コード判定用バイト列の長さと判定精度
3-8 まとめ

■Chapter 4 スクレイピングの極意
4-1 HTMLからデータを取得する
 正規表現
 XPath
 CSSセレクタ
 HTML以外のデータ
4-2 CSSセレクタを使いこなす
 指定した位置の要素を取得する――nth-child()
 テキストノードを文字列で検索する――contains()
 テキストノードを正規表現で検索する――matches()
 子孫の要素を含めずに検索する――containsOwn()とmatchesOwn()
 属性で検索する
   属性の有無による検索
   属性値での検索
   属性値の部分一致検索
   前方一致検索――[attr^=val]
   後方一致検索――[attr$=val]
   部分一致検索――[attr*=val]
   言語コードでの検索――[attr|=val]
   属性値に特定の文字を含まないものを検索する
4-3 スクレイピングしたデータの加工
 例1 alt属性からデータを取得する
 例2 金額の抽出
 例3 住所の抽出
4-4 メタデータを活用しよう
 Webページのメタデータ
  metaタグ
  PageMap
  OGP
    基本的なメタデータ
    任意のメタデータ
    構造化プロパティ
    複数設定
   Twitter Card
 構造化マークアップ
   Microformats
   Microdata
     itemscope属性
     itemtype属性
     itemprop属性
     itemref属性
   RDFa/RDFa Lite
     vocab属性、typeof属性、property属性
     resource属性
     prefix属性
   JSON-LD
   構造化データテストツールを活用しよう
   検索結果表示時の構造化データの利用
     パンくずリスト
     検索ボックス
     ナレッジグラフパネルへの情報の追加
     ファクトチェック
4-5 まとめ

■Chapter 5 認証を突破せよ!
5-1 認証が必要なページをクロールする理由
 認証の必要なWebサイトのクロールはマナーを守って
   プライバシーに注意
   トラブルにならないために、しっかりとした規約を
   セキュリティは厳重に
   できる限りAPIを使った連携を
5-2 様々な認証方式とクローリング方法
 HTTP認証
 フォームベース認証
   ログインフォームのHTMLと通信内容を分析してみよう
   クロスサイトリクエストフォージェリ(CSRF)
   フォームベース認証のプログラム例
   セッション管理の仕組み
   URLにセッションIDを含めるアプリケーションも
   セッションハイジャック
     HTTPSかつクッキーにsecure属性とhttpOnly属性を指定する
     適切な強度のセッションIDを使用する
  2段階認証
  CAPTCHAによるBOT対策
5-3 Web APIを使って情報を取得しよう
 アクセスキーによる認証
 OAuth 2.0
   OAuthの処理フロー
     Authorization Code(認可コード)
     Implicit Grant
     Resource Owner Password Credentials
     Client Credentials
     Authorization Codeのフロー
     アクセストークンとリフレッシュトークン
   認証と認可
   pac4jでGitHubのOAuthを利用してみる
5-4 まとめ

■Chapter 6 クローリングの応用テクニック
6-1 クローラーが守るべきマナー
 リクエスト数、リクエスト間隔の制限
 クロールしてもよいページの制限
   robots.txt――サイト単位の設定
   自分のクローラーはどれに従えばよいのか?
   アクセス制限はDisallowとAllowを見るべし
     例1 Disallowになにも記述がない場合
     例2 ディレクトリ末尾の/の有無による違い
     例3 DisallowやAllowの優先順位
   robots metaタグ――ページごとの設定
     微妙に意味が異なる2つのnofollow
   X-Robots-Tagヘッダ――HTML以外のファイルの場合
6-2 必要なページのみクロールしよう
 どこまでページングをたどるか
   まずはたどれるリンクを探そう
   新着アイコンを探せ
   まさかの無限ループ
 意外と使えない!? サイトマップXML
   テキストファイルのサイトマップ
   サイトマップインデックスファイル
   gzip形式
 RSSやAtomからサイトの更新情報を取得する
   RSS 1.0 / 2.0
   Atom
   PubSubHubbub
 コンテンツをキャッシュして通信を減らす
 gzip圧縮でレスポンスを高速化
6-3 削除されたコンテンツを判定する
 コンテンツに記載された終了期限を使用する
 対象サイトを定期的にクロールする
 インデックス済みのURLを定期的にチェックする
 一覧ページにURLが存在しなければ削除されたものとみなす
 残る問題
6-4 Webサイトの更新日時、更新頻度を学習する
 明記されている更新日時を探す
 エラー日時を把握しその日時を避ける
 更新頻度に応じてクロール頻度を調整する
 クロール所要時間からクローラーのリソース使用量を平準化する
6-5 究極の効率化=クロールしない
6-6 まとめ

■Chapter 7 JavaScriptと戯れる
7-1 AjaxやSPAの流行による苦悩
 AjaxによるJavaScriptの復権、そしてSPAの登場
 JavaScriptを使ったWebページの実例
   確認ダイアログやフォームの入力補助
   画面遷移をJavaScriptで行う
   HTMLを動的に生成する
   Ajaxを使って非同期通信を行う
 クローラーから見たJavaScript
7-2 JavaScriptとの戦いを避ける
 JavaScriptの動作を再現する
 クローラー向けの情報を探せ
 モバイルサイトを狙え
   Chromeでスマートフォン向けサイトを確認する
   スマートフォンのユーザーエージェント
7-3 ブラウザを操作するツールを活用する
 Selenium WebDriverを使ってみよう
   WebDriverのセットアップ
   WebDriverでクロールしてみる
   要素の選択
   ダイアログの操作
   非同期に更新される画面の表示を待つ
     要素が見つかるまで自動的にウェイトする
     指定した条件を満たすまでウェイトする
7-4 まとめ
各種問い合わせは以下のリンクからご連絡ください

関連リンク

関連商品

おうちで学べる Pythonのきほん

2,420円(税込)

2024.05.20発売

おうちで学べる Pythonのきほん【PDF版】

2,420円(税込)

2024.05.20発売

おすすめ特集

法人・教育機関のお客様へ

【法人・教育機関のお客様へ】新年度の大口注文・お見積りなど、お気軽にご相談ください

Webデザイン特集

デザインやコーディングなど、Webデザインに役立つスキルが身につく書籍を揃えました

生成AI特集

テキスト生成、画像生成、動画生成など、生成AI活用のスキルが身につく本をご紹介

新社会人におすすめの本

新社会人の役に立つスキルが身につく本。ビジネスパーソンとしてスタートダッシュを切ろう!

プログラミング教育の本

小学校から必修化!人気の『ルビィのぼうけん』ほかプログラミング教育の本はこちら

翔泳社のセミナー・講座

開発・ビジネス・マーケティング・EC運営・営業支援など、幅広いジャンルの講座を開催

特集をもっと見る