サポート
ダウンロード
サンプルファイルのダウンロード
(2021年1月29日更新)
本書のサンプルファイルをご利用いただけます。
- ダウンロード
- サンプルファイル(sample_codes_2021-01-28.zip)
正誤表
本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。
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
|
---|
P.79 Beautiful Soupの実行例でtitle要素を取得する例
誤 |
>>> soup.h1 # soup.titleのようにタグ名の属性で、title要素を取得できる。
|
---|
正 |
>>> soup.title # soup.titleのようにタグ名の属性で、title要素を取得できる。
|
---|
P.71 2.7のsave(filepath: str, books: List[dict])の説明
CSVとすべき箇所がSQLiteとなっていました。
誤 |
引数booksで与えられた書籍のリストをSQLiteデータベースに保存する。
|
正 |
引数booksで与えられた書籍のリストをCSV形式のファイルに保存する。
|
P.62 2.5のインタラクティブシェルの実行例
インタラクティブシェルの実行例のうち,下記の2行は誤りでした。これを実行するとNoneが帰ってくるため,実際には何も表示されません。
誤 |
>>> h1.text # text属性で要素のテキストを取得できる。
'今日のくだもの'
|
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
|
補足情報
P.160 5.2以降でforegoのインストールができない場合
Ubuntuにおいて,書籍中で紹介したforegoが,配布元の問題でダウンロードできなくなっています。
Ubuntuでforegoの代替ツールとしてforemanを導入,利用する方法を説明します。
aptでruby-foremanをインストールします。
sudo apt install -y ruby-foreman
|
インストールができたら,foregoの代替として使えるforemanが実行できるようになります。
書籍中のforegoの部分をforemanに置き換えて実行をお試しください。
foreman run python my_script.py
|
P.212 リスト5.21が動作しない場合
ページの内容が書籍の解説時と変わっていて動作しない可能性があります。
「h3 > a」から「a > h3」に変更するなど,適宜セレクタを変更してお試しください。
import mechanicalsoup
browser = mechanicalsoup.StatefulBrowser() # StatefulBrowserオブジェクトを作成する。
browser.open('https://www.google.co.jp/') # open()メソッドでGoogleのトップページを開く。
# 検索語を入力して送信する。
browser.select_form('form[action="/search"]') # 検索フォームを選択する。
browser['q'] = 'Python' # 選択したフォームにある name="q" の入力ボックスに検索語を入力する。
browser.submit_selected() # 選択したフォームを送信する。
# 検索結果のタイトルとURLを抽出して表示する。
page = browser.get_current_page() # 現在のページのBeautifulSoupオブジェクトを取得する。
for a in page.select('a > h3'): # select()でCSSセレクターにマッチする要素(Tagオブジェクト)のリストを取得する。
print(a.text)
print(browser.absolute_url(a.get('href'))) # リンクのURLを絶対URLに変換して表示する。
|
P.240 リスト5.30の実行
書籍の環境だと,/vagrant以下にDBを作成できない場合があります。リスト5.30ははカレントディレクトリにDBを作成しようとするので,「cd ~」して/home/vagrantに移動しての実行をお試しください。
なお,/home/vagrant以下にも作成できなければ,スクリプト内のDBのパスを'/tmp/geocoding.db'のように書き換える方法をお試しください。
P.180 5.3.1でe-Statからダウンロードするデータ
最新の有効求人倍率のデータ形式が書籍中のものから変更されているため動作しません。e-Statからファイルをダウンロードする際は,「~令和2年3月【旧様式】」となっている方のデータを利用してください。
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の検証ができない
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の実行がうまくいかない場合
ホスト側でchromedriverを起動する際に,以下のように --whitelisted-ips
オプションを指定することでエラーが出ずにChromeを自動制御できます。なお, 10.0.2.2 はRemote()
の引数で指定するURLのIPアドレスと同じ値です。
chromedriver.exe --port=4444 --whitelisted-ips=10.0.2.2
|