0
Help us understand the problem. What are the problem?

posted at

updated at

『Python2年生 スクレイピングのしくみ』で勉強中(その1)

この記事について

『Python2年生 スクレイピングのしくみ』(以下、書籍)でPythonを学習する超初心者の記録です。
『Python1年生』は人工知能を題材に、Pythonの基本的な文法等を解説していましたが、
こちらの書籍ではスクレイピングということで、人工知能とは別の題材になっています。

■ バックナンバー

実行環境

OS・MW・ライブラリ バージョンなど
OS Windows 10 Pro 21H2 19044.1645
Python 3.10.4
IDLE 3.10.4
beautifulsoup4 4.11.1
japanize-matplotlib 1.1.3
matplotlib 3.5.1
openpyxl 3.0.9
pandas 1.4.2
requests 2.27.1
xlrd 2.0.1
xlwt 1.3.0

やったこと

「『Python1年生』で勉強中」のときと同様に、サンプルプログラムを試しながら読んでいました。
例によって書籍の内容を進めることを優先したため、基本的には書籍の内容通り脱線せずに進めてます。

具体的には「第1章 Pythonでデータをダウンロード」「第2章 HTMLを解析しよう」「第3章 表データを読み書きしよう」と「第4章 オープンデータを分析してみよう」の途中までをやりました。

気になったところ

Python関連

response.encodingとUTF-8について

書籍のp34のサンプルプログラムでテキストファイルに書き込みを行い、サクラエディタで開いたところ文字化けしていました。
UTF-8で開こうとしているのに、Shift-JISで書き込まれているのが原因のようです。

サンプルプログラムの「response.encoding = response.apparent_encoding」の記述を「response.encoding = "utf-8"」に書き換えてみましたが、想定通りにならず……
いったん放置しています。

pandasにおける列指定と行指定の方法について

pandasにて、列を指定するときには「df["列名"]」なのに、行を指定するときには「df.loc[行番号]」なのは何故なんだろう……
「.loc」というのは恐らく「col」の逆つづりなんでしょうが、であれば列を指定するときにも「df.row["列名"]」とか「df.wor["列名"]」のほうが統一感があるのに(分かりやすいかは別として)。
これはあれですかね、いわゆる「歴史的経緯」とかいうやつなんでしょうか(※調べてないので完全に推測です)。

「pip install」コマンドでインストールしたライブラリの確認方法

「実行環境」欄のバージョンを書くために、「pip install」でインストールしたもののバージョンの確認方法を検索してみました。
コマンドプロンプトから「pip list」で一覧表示できました(Windowsの場合)。
※参照:Pythonのパッケージ(ライブラリ)のバージョンを確認 | note.nkmk.me

C:\Users\user>pip list
Package             Version
------------------- -----------
beautifulsoup4      4.11.1
certifi             2021.10.8
charset-normalizer  2.0.12
cycler              0.11.0
et-xmlfile          1.1.0
fonttools           4.32.0
idna                3.3
japanize-matplotlib 1.1.3
joblib              1.1.0
kiwisolver          1.4.2
matplotlib          3.5.1
numpy               1.22.3
openpyxl            3.0.9
packaging           21.3
pandas              1.4.2
Pillow              9.1.0
pip                 22.0.4
pyparsing           3.0.8
python-dateutil     2.8.2
pytz                2022.1
requests            2.27.1
scikit-learn        1.0.2
scipy               1.8.0
setuptools          58.1.0
six                 1.16.0
soupsieve           2.3.2.post1
threadpoolctl       3.1.0
urllib3             1.26.9
wheel               0.37.1
xlrd                2.0.1
xlwt                1.3.0

書籍の内容について ※Pythonと直接関係しない部分

Yahoo!ニュースのトピックスのタグについて

書籍のp53以降(「LESSON 05 ニュースの最新一覧を取得してみよう」)では、「YahooニュースのITの最新トピックス一覧」を取得して表示する流れになっています。
p55では<ul class="topicsList_main">をfindしてaタグを表示することになっていますが、現在のYahooニュースのソースを見てみたところ、現在はこのclassを使用していませんでした。
というわけで、<div class="sc-fPbjcq hpGpdM">をfindして試してみました。
サンプルプログラムの範囲ではこれで問題ないようです。
※なお、この記事を書くにあたって改めてYahooニュースのタグを確認してみたところ、<div class="sc-****** ******">の******部分は自動で変わるようで、今は別の文字列になっていました。

e-Statの人口推計データのダウンロード時の、「表ダウンロード」の選択項目について

書籍のp121以降(「LESSON 14 e-Stat:政府統計の相互窓口」※)では、e-Statから「全国の人口推計データ」をダウンロードしています。
(※正誤表によると書籍のLESSON14のタイトルは誤字ですが、ここでは印刷物通りに記載します)

で、データをダウンロードする際に「表ダウンロード」という画面を経由するのですが、その設定画面の設定項目が、現在(2022/04/30時点)では書籍のものから変わっているようでした。
以下のように選択すると、サンプルプログラムに使える形式でダウンロードできるようです。※記載していない項目は書籍の通り、もしくはデフォルト値

項目名
ファイル形式 CSV形式(クロス集計表形式)
凡例の出力 出力しない
データがない行を表示しない チェックを外す
データがない列を表示しない チェックを外す

誤字

書籍のp122、1行目に「①「人口統計」をクリックして~」とありますが、実際は「人口推計」でした。
翔泳社のサイトで第5刷の正誤表を見てみましたが載っていなかったため、問い合わせフォームから連絡してみました。

あと、p168のフタバちゃんのセリフに「Pyhton」という誤字があるのも偶然見つけました。
こちらも正誤表には記載がなかったので、この後問い合わせフォームから投げておきます。

後で調べる一覧

※「『Python1年生』で勉強中」で記載したものは書いていません(雑多になりすぎるため)。

  • requests.encodingでUTF-8を指定する方法について

余談

当たり前ではあるんですが、一度サンプルプログラムを写経するだけではさすがに覚えられませんね。
写すことばかり意識がいっていて、そのコードの目的とか、「なぜこの書き方になっているのか?」のようなことを深く考えないで進めていることも多いです。
とはいえ、途中であまり時間をかけすぎると、自分の性格上挫折するのが見えているので、効率は悪いんでしょうが当面はこんな感じで少しずつやろうかなと思っています。

参考書籍、参考ページ

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?