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

[cover photo]
TOPICS
Python
発行年月日
PRINT LENGTH
356
ISBN
978-4-8144-0122-2
原書
Web Scraping with Python, 3rd Edition
FORMAT
Print PDF EPUB
Ebook
3,960円
Ebookを購入する
Print
3,960円

Webスクレイピングとは、インターネットからデータを機械的に集め、必要な情報を抽出する技術のことです。2019年の第2版発刊から約5年が経過し、生成AIの台頭で情報を得る方法も大きく変わりましたが、本当に欲しい情報を正しくピンポイントで得るためには、依然としてWebスクレイピングについての知識とスキルが必要です。本書では、インターネット上の膨大な情報の中から、生成AIや検索エンジンだけでは集められない本当に必要な正しい情報を入手する方法を、基礎からていねいに解説し、データの抽出、格納、収集後のクリーニング、さらにはJavaScriptの実行、OCRを含めた自然言語処理、並列処理などの高度なトピックもカバー。プログラミングテクニックとテクノロジー全般だけでなく、法律面の解説も加え、問題に遭遇した際の対処法まで紹介します。

目次

はじめに

Ⅰ部 スクレイパーの作成

1章 インターネットの仕組み
    1.1 ネットワーク
        1.1.1 物理層
        1.1.2 データリンク層
        1.1.3 ネットワーク層
        1.1.4 トランスポート層
        1.1.5 セッション層
        1.1.6 プレゼンテーション層
        1.1.7 アプリケーション層
    1.2 HTML
    1.3 CSS
    1.4 JavaScript
    1.5 開発者ツールでWebサイトを見る

2章 Webスクレイピングの適法性と倫理
    2.1 商標、著作権、特許
        2.1.1 著作権法
    2.2 動産不法侵入
    2.3 コンピューター詐欺と濫用に関する法律
    2.4 robots.txtとサービス規約
    2.5 3つのWebスクレイパー
        2.5.1 eBay対Bidder’s Edgeと動産不法侵入
        2.5.2 米国政府対Auernheimerと「コンピューター詐欺と濫用に関する法律」
        2.5.3 Field対Google:著作権とrobots.txt

3章 Webスクレイピングアプリケーション
    3.1 プロジェクトの分類
    3.2 Eコマース
        3.2.1 マーケティング
    3.3 学術研究
    3.4 プロダクトを作る
    3.5 旅行
    3.6 営業
    3.7 SERPスクレイピング

4章 スクレイパーの開発
    4.1 Jupyterを使う
    4.2 接続する
    4.3 BeautifulSoup
        4.3.1 BeautifulSoupをインストールする
        4.3.2 BeautifulSoupを実行する
        4.3.3 信頼性のある接続と例外処理

5章 高度なHTMLのパース
    5.1 BeautifulSoupの使い方
        5.1.1 BeautifulSoupのfind()とfind_all()
        5.1.2 他のBeautifulSoupオブジェクト
        5.1.3 ツリーナビゲーション
    5.2 正規表現
    5.3 正規表現とBeautifulSoup
    5.4 属性へのアクセス
    5.5 ラムダ式
    5.6 必ずしもハンマーが必要なわけではない

6章 Webクローラーの開発
    6.1 単一ドメインを走査する
    6.2 サイト全体のクローリング
        6.2.1 サイト全体のデータ収集
    6.3 インターネットをクローリングする

7章 Webクローリングのモデル
    7.1 プランニングとオブジェクトの定義
    7.2 さまざまなWebサイトのレイアウトを扱う
    7.3 クローラーを構造化する
        7.3.1 検索を用いたサイトのクローリング
        7.3.2 リンクをたどってサイトをクローリングする
        7.3.3 異なる種類のページもクローリングする
    7.4 Webクローラーのモデルについての考察

8章 Scrapy
    8.1 Scrapyのインストール
        8.1.1 新たなスパイダーの初期化
    8.2 シンプルなスクレイパーを書く
    8.3 規則を使ったスパイダー
    8.4 アイテムの作成
    8.5 アイテムの出力
    8.6 アイテムパイプライン
    8.7 Scrapyによるロギング
    8.8 さらに学ぶために

9章 データの格納
    9.1 メディアファイル
    9.2 CSVにデータを保存する
    9.3 MySQL
        9.3.1 MySQLのインストール
        9.3.2 基本的なコマンド
        9.3.3 PythonからMySQLに接続する
        9.3.4 データベースのテクニック
        9.3.5 6次のウィキペディアのようにMySQLで関連をたどる
    9.4 メール

Ⅱ部 高度なスクレイピング

10章 データの読み込み
    10.1 エンコーディング
    10.2 テキスト
        10.2.1 テキストエンコーディングとグローバルインターネット
    10.3 CSV
        10.3.1 CSVファイルを読む
    10.4 PDF
    10.5 Microsoft Wordとdocx

11章 汚いデータの取り扱い
    11.1 テキストのクリーニング
    11.2 正規化されたテキストの取り扱い
    11.3 pandasによるデータのクリーニング
        11.3.1 クリーニング
        11.3.2 インデックス、ソート、フィルタリング
        11.3.3 pandasをさらに詳しく知る

12章 自然言語の読み込みと書き込み
    12.1 データを要約する
    12.2 マルコフモデル
        12.2.1 6次のウィキペディア:結論
    12.3 Natural Language Toolkit(NLTK)
        12.3.1 インストールと設定
        12.3.2 NLTKによる統計分析
        12.3.3 NLTKによる字句解析
    12.4 さらに学ぶために

13章 フォームとログインを介したクローリング
    13.1 Requestsライブラリ
    13.2 簡単なフォームを送信する
    13.3 ラジオボタン、チェックボックス、その他の入力
    13.4 ファイルと画像を送信する
    13.5 ログインとCookieを扱う
        13.5.1 HTTP Basic認証
    13.6 その他のフォームの問題

14章 JavaScriptのスクレイピング
    14.1 JavaScriptの簡単な紹介
        14.1.1 一般的なJavaScriptライブラリ
    14.2 Ajaxと動的なHTML
    14.3  Seleniumを用いてPythonでJavaScriptを実行する
        14.3.1 Seleniumのインストール方法と実行方法
        14.3.2 Seleniumセレクタ
        14.3.3 読み込みを待つ
        14.3.4 XPath
    14.4 他のWebDriver
    14.5 リダイレクトの処理
    14.6 JavaScriptのまとめ

15章 APIを介したクローリング
    15.1 APIの簡単な紹介
        15.1.1 HTTPメソッドとAPI
        15.1.2 APIレスポンス
    15.2 JSONをパースする
    15.3 ドキュメントがないAPI
        15.3.1 ドキュメントのないAPIを調べる
        15.3.2 ドキュメントのないAPIのドキュメントを作る
    15.4 APIと他のデータソースを組み合わせる
    15.5 APIについてさらに学ぶために

16章 画像処理とテキスト認識
    16.1 ライブラリ概要
        16.1.1 Pillow
        16.1.2 Tesseract
        16.1.3 NumPy
    16.2 適切にフォーマットされたテキストの処理
        16.2.1 画像を自動修正する
        16.2.2 Webサイトの画像からテキストをスクレイピングする
    16.3 CAPTCHAの読み取りとTesseractの学習
        16.3.1 Tesseractを学習させる
    16.4 CAPTCHAの読み取りと送信

17章 スクレイピングの落とし穴の回避
    17.1 倫理についての注意
    17.2 人間らしく見せる
        17.2.1 ヘッダーを調整する
        17.2.2 JavaScriptでCookieを扱う
        17.2.3 TLSフィンガープリント
        17.2.4 タイミングがすべて
    17.3 フォームでよく見られるセキュリティ機能
        17.3.1 隠しフィールドの値
        17.3.2 ハニーポットを避ける
    17.4 人間らしく見せるためのチェックリスト

18章 スクレイパーによるWeb サイトのテスト
    18.1 テスト入門
        18.1.1 ユニットテストとは何か
    18.2 Pythonのunittest
        18.2.1 ウィキペディアをテストする
    18.3 Seleniumでテストする
        18.3.1 サイトとやり取りする

19章 並列クローリング
    19.1 プロセスとスレッド
    19.2 マルチスレッドクローリング
        19.2.1 競合状態とキュー
        19.2.2 threadingモジュール
    19.3 マルチプロセス
        19.3.1 マルチプロセスクローリング
        19.3.2 プロセス間通信
    19.4 マルチプロセスクローリング:その2

20章 Webスクレイピングプロキシ
    20.1 なぜリモートサーバーを使うか
        20.1.1 IPアドレスのブロックを避ける
        20.1.2 移植性と拡張性
    20.2 Tor
        20.2.1 PySocks
    20.3 リモートホスティング
        20.3.1 Webサイトホスティングアカウントから実行する
        20.3.2 クラウドから実行する
        20.3.3 さらに進むために
    20.4 Webスクレイピングプロキシ
        20.4.1 ScrapingBee
        20.4.2 ScraperAPI
        20.4.3 Oxylabs
        20.4.4 Zyte
    20.5 さらに学ぶために

索引