Pythonクローリング&スクレイピング[増補改訂版] ―データ収集・解析のための実践開発ガイドー

サポートページ

この記事を読むのに必要な時間:およそ 0.5 分

ダウンロード

サンプルファイルのダウンロード

(2021年1月29日更新)

本書のサンプルファイルをご利用いただけます。

ダウンロード
サンプルファイル(sample_codes_2021-01-28.zip)

補足情報

(以下2021年10月4日更新)

P.240 リスト5.30の実行

書籍の環境だと,/vagrant以下にDBを作成できない場合があります。リスト5.30ははカレントディレクトリにDBを作成しようとするので,「cd ~」して/home/vagrantに移動しての実行をお試しください。

なお,/home/vagrant以下にも作成できなければ,スクリプト内のDBのパスを'/tmp/geocoding.db'のように書き換える方法をお試しください。

(以下2021年2月24日更新)

P.180 5.3.1でe-Statからダウンロードするデータ

最新の有効求人倍率のデータ形式が書籍中のものから変更されているため動作しません。e-Statからファイルをダウンロードする際は,「~令和2年3月【旧様式】」となっている方のデータを利用してください。

(以下2021年1月29日更新)

P.265 6.2.3 でトップページのトピックス一覧を取得できない

CSSセレクターを次の通りに変更すると取得できます。


Before: ul.topicsList_main a::attr("href")
After: section.topics a::attr("href")

P. 271 6.2.4 でヘッドラインのタイトルと本文を取得できない

CSSセレクターを次の通りに変更すると取得できます。


タイトル
    Before: .tpcNews_title::text
    After: [data-ual-view-type="digest"] > a > p::text
本文
    Before: .tpcNews_summary
    After: [data-ual-view-type="digest"] > p

P.284 6.3.2でIKEA.comの製品情報を取得できない

サイトマップ・製品ページのURLと製品ページのHTMLが変更になっており,リスト6.7 ikea.py の
sitemap_follow 以降を次のように変更すると取得できます。


# サイトマップインデックスからたどるサイトマップURLの正規表現のリスト。
# このリストの正規表現にマッチするURLのサイトマップのみをたどる。
# sitemap_followを指定しない場合は、すべてのサイトマップをたどる。
sitemap_follow = [
    r'prod-ja-JP',  # 日本語の製品のサイトマップのみたどる。
]
# サイトマップに含まれるURLを処理するコールバック関数を指定するルールのリスト。
# ルールは (正規表現, 正規表現にマッチするURLを処理するコールバック関数) という2要素のタプルで指定する。
# sitemap_rulesを指定しない場合はすべてのURLのコールバック関数はparseメソッドとなる。
sitemap_rules = [
    (r'/jp/ja/p/', 'parse_product'),  # 製品ページをparse_productで処理する。
]

def parse_product(self, response):
    # 製品ページから製品の情報を抜き出す。
    yield {
        'url': response.url,  # URL
        'name': response.css('.range-revamp-header-section__title--big::text').get().strip(),  # 名前
        'type': response.css('.range-revamp-header-section__description-text::text').get().strip(),  # 種類
        'price': response.css('.range-revamp-price__integer::text').get().strip(), # 価格(通貨は無し)
    }

P.50 2.4.1のLivedoorお天気WebサービスのAPIが動かず,JSONの検証ができない

(以下2020年8月13日更新)

Livedoorお天気Webサービスのサービス終了で書籍と同一内容ではJSONを返すAPIの検証ができなくなっています。
こちらについては,代替としてJSONを返すWeb APIを利用すれば同等の操作ができます。
例えば,GitHub APIでも実行できます。


# GitHub REST API v3で、Requestsのリポジトリ情報をJSON形式で取得する。
>>> r = requests.get('https://api.github.com/repos/psf/requests')
>>> r.json()
{'id': 1362490, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMzYyNDkw', 'name':
'requests', 'full_name': 'psf/requests', 'private': False, ...

P.149 5.1.1のWikiExtractor.pyのwgetによる取得

プロジェクトの構成の変更により,書籍で案内した方法ではファイルが取得できなくなっていました。下記の通り,以前のバージョンを導入してください。


$ wget https://github.com/attardi/wikiextractor/raw/3162bb6/WikiExtractor.py

P.220 5.6.1のSeleniumの実行がうまくいかない場合

(以下2020年8月5日更新)

ホスト側でchromedriverを起動する際に,以下のように --whitelisted-ips オプションを指定することでエラーが出ずにChromeを自動制御できます。なお, 10.0.2.2 はRemote() の引数で指定するURLのIPアドレスと同じ値です。


chromedriver.exe --port=4444 --whitelisted-ips=10.0.2.2

お詫びと訂正(正誤表)

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2021年10月4日最終更新)

P.102 リスト3.10の保存・実行に関する説明

このスクリプトを名前で保存して実行すると、
このスクリプトをsave_mongo.pyという名前で保存して実行すると、正しいソースコード

P.105 表3.2の強調部分

書籍中で本来強調される部分が強調されていませんでした。本来は下記箇所が強調されます。


https://stocks.finance.yahoo.co.jp/stocks/detail/?code=8411
https://www.amazon.co.jp/dp/B00QJDQM9U
https://twitter.com/TwitterJP/status/1017144330211880960
http://www.itmedia.co.jp/news/articles/1807/26/news115.html

(以下2020年6月4日更新)

P.79 Beautiful Soupの実行例でtitle要素を取得する例

>>> soup.h1 # soup.titleのようにタグ名の属性で、title要素を取得できる。
>>> soup.title # soup.titleのようにタグ名の属性で、title要素を取得できる。

(以下2019年10月21日更新)

P.71 2.7のsave(filepath: str, books: List[dict])の説明

CSVとすべき箇所がSQLiteとなっていました。

引数booksで与えられた書籍のリストをSQLiteデータベースに保存する。
引数booksで与えられた書籍のリストをCSV形式のファイルに保存する。

(以下2019年10月8日更新)

P.62 2.5のインタラクティブシェルの実行例

インタラクティブシェルの実行例のうち,下記の2行は誤りでした。これを実行するとNoneが帰ってくるため,実際には何も表示されません。


>>> h1.text  # text属性で要素のテキストを取得できる。
'今日のくだもの'

(以下2019年8月22日更新)

P.13 1.3の脚注10

サンプルファイルのダウンロードリンクが前版を示していました。なお,前版にも同等のファイルがあるため動作はします。

このファイルは書籍のサンプルファイル(https://gihyo.jp/book/2017/978-4-7741-8367-1)に含まれています。
このファイルは書籍のサンプルファイル(https://gihyo.jp/book/2019/978-4-297-10738-3)に含まれています。

P.199 5.4.2の新幹線旅客輸送量の推移のURL

httpsとすべきURLをhttpで表記していました。

http://www.data.go.jp/data/dataset/mlit_20140919_2423
https://www.data.go.jp/data/dataset/mlit_20140919_2423