ここ最近、Pythonを教える機会があるのですが、今回は1時間でPythonを使ってサクッとスクレピングをしながらPythonの触りを体験してみよう!という内容でブログ記事を書いてみたいと思います。
なお、Pythonを動かす環境としては、Google Colaboratoryを使用します。
この記事の対象者
この記事の対象者は以下のような方を想定しています。
- PC、キーボード操作はできる
- プログラミングはやったことない(ちょっとだけやったことあるけどPythonも触れるよという方は対象かしら。変数の基礎とか出てきます)
Google Colaboratoryの準備
先ほど記載した通り、Pythonを実行するに当たってはGoogle Colaboratoryを使用します。
Google Colaboratoryとは、Googleが提供するクラウド上のPython実行環境です。
Pythonを使ってプログラミングをするには環境構築・つまりプログラミングをするための準備が必要になるのですが、これが非常に難しい…!
Google Colaboratory を使うと、難しい環境構築を必要とすることなく、ブラウザ上で手軽にPythonを使ったプログラミングを使うことができます!
手元のパソコンで、https://colab.research.google.com/?hl=jaをクリックして開いて、以下のような画面が表示されることを確認してください!
確認できたら、ファイル→「ノートブックを新規作成」を選択してください
以下のような画面に切り替われば、準備完了です!
Pythonを学ぶ
Pythonは、プログラミング言語の1種です。読みやすく、理解しやすく、シンプルでありながら、多様なタスクを実行できます。
Pythonは多くの分野で使用されており、Web開発、データ解析、人工知能、科学計算、ビジネスアプリケーションなど、多岐にわたるタスクを実行できます。
また、Pythonには、標準ライブラリが多数含まれており、開発者が実行する必要がある多くのタスクをサポートしています。
文字・数字…情報を表示させてみよう
プログラミングでは、世の中のさまざまな事象を「数字」「文字」といったデータで表現します。
たとえば、「私コスゲ」と「岸田総理」がどれだけ似ているかをプログラミングを使って計算したいとき、いろんな技術を使った上で、最終的に2人が似ているかどうかを「数字」「文字」のデータで表現します。
そのため、文字や数字を扱い表示することができるようになるのは、プログラミングの基礎として必要不可欠と言えます。
まずは、Pythonで文字や数字のデータを表示できるようにしましょう!
Google ColaboratoryにPythonのコードを入力してみる
Google Colaboratoryで新規ノートブックを開いたら、まずは以下のプログラムを書いて、「こんにちは」と表示させてみましょう!
print("こんにちは")
※入力したコードを実行するためにはShiftキー + Enterキーを押す必要があります!
▼ 実行結果
こんにちは
これで、文字データを表示させることができます!
print()
は、Python
を使ってデータを表示するための基本的な命令です。
数字を表示してみよう
次に、数値データを扱ってみましょう。Google Colaboratoryのノートに以下のプログラムを書いて、**5
**と表示させてみましょう。
print(5)
▼ 結果
5
計算をしてみよう
プログラミングでは、足し算などの計算も可能です。
Google Colaboratoryのノートに以下のプログラムを書いて、5
と表示させてみましょう。
print(2 + 3)
▼ 結果
5
変数を学ぼう
次は、変数について見ていきます!
改めて…変数について
何かしらのプログラミング言語を触ったことのある方にとってはお分かりの内容かと思いますが、変数について触れておきましょう!
変数は、データ(値)の入れ物(箱)であり、コンピューターに様々な情報を記憶してもらうための仕組みです。箱の名前が「変数名」であり、箱の中に実際の値(文字列や数値など)が入っています。
変数は、以下のように書きます。
変数名 = "代入する値";
💻 Google Colaboratoryで以下のプログラムを書いて、Shiftキー + Enterキーを押して実行をしてみましょう!
print("大吉")
▼ 結果
大吉
次に、以下のプログラムを書いて、Shiftキー + Enterキーを押して実行をしてみましょう!
result = "大吉"
print(result)
▼ 結果
大吉
先ほどまでと同じように、プログラムを実行した際に「大吉」という文字が表示されればOKです!
プログラムの結果は変わらないのですが、変数を使うことで複数行にコードが分かれることになります。
なぜ変数を使うのか?
変数を使ってみましたが、なぜ変数を使うの必要があるのでしょうか。
変数には以下のようなメリットがあります。
- 同じ値を繰り返し使える
- 変更に対応しやすい
具体例として、以下を見てみましょう。
Pythonのコードを使って自己紹介の情報を表示しているコードの例です。
print("Hello, my name is kosuge. I'm 16 years old.")
print("kosuge is a high school student.")
print("Next year, kosuge will be 17 years old.")
これでもダメではないのですが、よく見ると「kosuge」という人の名前が3回登場していますよね。
kosugeの名前や年齢を変更したい場合、全ての行を手動で編集しなければなりません。
変数を使うと、以下のように書けます。
name = "kosuge"
age = 16
print("Hello, my name is " + name + ". I'm " + str(age) + " years old.")
print(name + " is a high school student.")
print("Next year, " + name + " will be " + str(age + 1) + " years old.")
この場合、名前や年齢を変えたいときは、一度変数を変えるだけで全ての行が更新されます。これが変数を使うメリットの一つです。
さらに、コードを読んだときに「nameは名前を、ageは年齢を表す」というように、変数の名前から、どのデータが何の目的で使用されるのか、推測しやすいのも大きなメリットです。
さらに、変数を使うことで同じ値を何度も使うことができ、計算も楽になります。例えば、
radius = 5
pi = 3.141592
area = pi * radius ** 2
circumference = 2 * pi * radius
print("The area is " + str(area))
print("The circumference is " + str(circumference))
このように、変数radius
とpi
を使って円の面積と円周を計算しています。もし、半径を6に変更したい場合、単にradius = 6
と書き換えるだけで、面積と円周の計算結果が自動的に更新されます。
変数を使うことでコードが柔軟性を持ち、編集が容易になり、またコードの意味も理解しやすくなるのです。
result = "大凶"
result = "大吉"
print(result)
条件分岐を学ぼう
次に、こちらもどのプログラミング言語においても必ず登場するif文・条件分岐について学んでみましょう!
if文(条件分岐)を学んでみよう!
「ある条件が成り立つときだけある処理を行う」プログラムを条件分岐(if文)と言います。
ifという単語は英語でも使われるので、聞いたことがある方はいらっしゃると思います。
使われ方は、英語と同じで、「もし〜だったら、〜する」という使われ方をします。
if文は以下のように書きます。
if 条件:
# 条件に当てはまる状況だった時に実行したいプログラムの内容をここに書く
else:
# 条件に当てはまらない状況だった時に実行したいプログラムの内容をここに書く
条件式の中に書かれたものが合っていたら、条件式に合致した場合の処理を実行します。 合っていなかったら、条件式に合致しなかった場合の処理を実行します。
なお、Pythonでは、タブを使ってスペースを空けることに大きな意味が含まれます!
スペースの空け方を間違えるとプログラムエラーになるので、十分注意しましょう!
以後、行頭のスペースがあるところは、全てTabキーで表現するようにしてください!
Pythonはセミコロンやコロンなどの記号の使用が非常に限定的です。この辺りもPythonが書きやすいとされている理由の1つですね◎
if文(条件分岐)をさらに深めてみよう!
先ほどまでに制作したおみくじは「大吉 or 大凶」のどちらかが表示されるというものでした。
しかし、elif
というものを使って、「大吉 or 大凶 or 中吉」のように3つ以上のおみくじの結果をランダムに表示させるおみくじを作ることもできます。
if 条件:
# 条件に当てはまる状況だった時に実行したいプログラムの内容をここに書く
elif 条件:
# 条件に当てはまる状況だった時に実行したいプログラムの内容をここに書く
else:
# 条件に当てはまらない状況だった時に実行したいプログラムの内容をここに書く
先ほどまで書いたif文のif
とelse
の間にelif
というものを追加することで、条件分岐のバリエーションを増やすことができます!
実際に以下のようにコードを編集して、elif
を理解していきましょう!
num = 10
if num % 5 == 0:
print('大吉')
elif num % 3 == 0:
print('中吉')
else:
print('大凶')
編集したら、Shiftキー + Enterキーを押してプログラグを実行してみましょう!
▼ 結果
💡 else if
は何個でも追加することができます。
if
やelif
の条件指定部分にはさまざまな指定ができます。
さまざまな条件を指定することで、表示結果の豊かなおみくじだったり、大吉の出にくいおみくじを作ることができます!
Pythonのライブラリを使ってみよう
スクレイピングとは
スクレイピングとは、Webサイト上の情報を収集するための技術です。WebページのHTMLデータを取得し、その情報を解析・加工して必要な情報を抽出することができます。
スクレイピングは、Webサイト上の情報を手動で収集する作業を省くことができるため、時間や労力を節約することができます。
また、大量の情報を自動的に収集することができるため、ビジネス上の利用や、学術研究などにも利用されています。
ただし、スクレイピングはWebサイトの利用規約に違反することがあるため、注意が必要です。Webサイトの利用規約を確認し、適切な方法でスクレイピングを行うようにしましょう。
例えば、Instagramなどでは、規約上スクレピングが禁止されています。 (明確にスクレイピングという言葉が使用されているわけではありません)
requestsでスクレイピングをしてみよう
それでは今回は、Arrownからスクレイピングを行ってみましょう!
スクレイピングを行う上では、どのWebサイトからスクレイピングをしたいのかを指定する必要があります。URL指定をし、requests
ライブラリを用いれば、スクレイピング自体は容易におこなうことができます!
Google Colabのノートブック上に以下のコードを入力し、Shiftキー + Enterキーを押してプログラムを実行してみましょう!
# モジュールを読み込み
import requests
from bs4 import BeautifulSoup
url = '<https://arrown-blog.com>'# スクレイピング先のURLを指定
response = requests.get(url) # 取得されたHTMLがresponseに保存される
これでrequestsライブラリを使い、スクレイピングによりWebサイトのデータを取得することができました。
BeautifulSoupでスクレイピングをしたデータを解析してみましょう
続いて、スクレイピングをして取得したデータについて、BeautifulSoupを使って解析をし、取得したデータをHTMLとして表示をしてみましょう!
先ほどのコードに引き続き、Google Colabのノートブック上に以下のコードを入力し、Shiftキー + Enterキーを押してプログラムを実行してみましょう!
soup = BeautifulSoup(response.text, 'html.parser') # BeautifulSoupで解析 print(soup)
▼結果
すごい!ArrownのページのHTMLが取得できたのがわかるかと思います!
💡 BeautifulSoup(response.text, 'html.parser')
1つめのデータ・・・解析する対象のデータ(今回の場合、responseというデータのかたまりの中の、textという部分にページの情報が含まれている)
2つめのデータ・・・解析に使用するツール。
さらに細かいデータ取得を実施
BeautifulSoupを使うと、さらに細かいデータを取得することができます。
Beautiful Soupでは、特定の条件を指定することで、
HTMLタグ単位で細かく情報を取得することが可能です!
主に、以下の3つの要素(HTML)取得方法があります!
(丸括弧の中の部分には取得したいHTMLの条件が入ります。以下は一例の書き方です)
■select
soup.select(".articleListItem h2")
■find
soup.find("h1")
soup.find(id="header_subtitle")
soup.find(class_="articleListItem")
■find_all
soup.find_all("h2")
soup.find_all(id="header_subtitle")
soup.find_all(class_="pubDate")
試しに、画像のみを抽出して取得してみましょう!
画像は<img>
タグと呼ばれる種類のHTMLタグを使って表示されています。
この特性を使って、以下のように書くと画像のみを抽出して取得することができます。
soup.find_all('img')
▼結果
画像のみを取得することができました!
まとめ
スクレイピング、いかがでしたか??
今回は簡単な抽出のみでしたが、スクレイピングを使えば、さまざまなデータ収集を行うことができるようになります。Pythonを学ぶきっかけとしてもぜひ!
あ、スクレイピングでArrownに強烈な負荷はかけないでくださいねw