何から勉強したらいいかわからない。
という人はスクレイピングからやったらいいと思うよ。
スクレイピングって何?
便利な使い道
Pythonでスクレイピングする方法
Python初心者の勉強にちょうどいいスクレイピング
実際に僕はPythonの最初の勉強で、スクレイピングのプログラムを作りました。
ネットに転がっている情報をプログラムが自動で調べてくれる。
普通に調べると面倒くさいことをプログラムにやらせます。
いくつか例を挙げておきます。
- 複数のお天気サイトのデータの平均を表示
- 自分が保有している株価を全部自動で集める
- 気になる商品の値段を各通販サイト全て調べる
などなど、使い方は無限大です。
しかも、ネットで情報を検索するなんて誰でもやってることだから、誰でも役に立ちます。
さらに、このプログラムを毎日決まった時間に自動で起動するようにしておけば、あなたは集まった情報を見るだけです。
まさに、自動化の見本ですね!
PCの電源の自動化の方法は別の記事に書いてます↓
Pythonのスクレイピングプログラム
今流行りのプログラミング言語Pythonを使ってスクレイピングプログラムを作っていきたいと思います。
意味が分からない人は『「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典』で調べるといいかも!
モジュールをインストール
Pythonでスクレイピングをするには、いくつかモジュールが必要です。
特にこの2つは必須。
requests:HTMLのデータをくれ!というモジュール
beautifulsoup4:HTMLデータを解析するモジュール
requestsでとってきたデータをbeautifulsoup4で解析するという流れ。
まずはこの2つのモジュールをインストールしましょう。
この2つはPyPIで配布されているため、簡単にインストールできます。
インストールはコマンドプロンプトでこのコードを入力するだけ。
pip install requests
pip install beautifulsoup4
これで、2つのモジュールのインストールが完了です!
今回のプログラムの全貌
最初に完成したプログラムを見てみましょう。
import requests
from bs4 import BeautifulSoup
TARGET_URL_VTI = "https://www.bloomberg.co.jp/quote/VTI:US"
html_VTI = requests.get(TARGET_URL_VTI)
soup = BeautifulSoup(html_VTI.content, "html.parser")
VTIprice = soup.find('div', class_='price')
print(VTIprice.text+"$")
TARGET_URL_yen = "https://nikkei225jp.com/fx/"
html_Yen = requests.get(TARGET_URL_yen)
soup = BeautifulSoup(html_Yen.content, "html.parser")
dollar = soup.find_all('div', class_='if_cur')
print(dollar[2].text+"円")
print("VTI価格(円換算)"+(str(float(VTIprice.text)*float(dollar[2].text))+'円'))
わざとコメントを消しているので分かりにくいはずです。
今回紹介するスクレイピングプログラムは、「米国株(ETF)VTIの株価を円換算して表示させる」というものです。
スクレイピングの初歩の初歩のプログラムなので、初心者にはちょうどいい難易度のはずです。
ちなみに僕はこのプログラムにさらに改造を加えて、多数の株の円換算価格を毎朝LINEに送ってくるようにしています。
LINEに送ったりする方法は別の記事に書いているので参考にしてみてください!
★★★★★
Pythonを実行した結果をLINEに送る方法
★★★★★
1つずつ見ていきましょう!
モジュールをimport
まずは、requests、Beautifulsoup4のモジュールをimport(使うことを宣言)します。
#requests、BeautifulSoupを使う宣言
import requests
from bs4 import BeautifulSoup
「from bs4 import BeautifulSoup」この部分は同じ名前だから分かりにくいだけで、他の例で考えると理解しやすいです。
「from 車 import エンジン」だと、「車の中のエンジンという部品を使うよ」という意味です。
これで2つのモジュールを使う準備ができました。
データを取得するURLに名前を付ける
次に、HTMLデータを取得するURLに名前を付けます。要するに変数を使います。
#情報を取得するURL
TARGET_URL_VTI = "https://www.bloomberg.co.jp/quote/VTI:US"
VTIの株価が載っているURLをTARGET_URL_VTIと名前を付けています。
「https://www.bloomberg.co.jp/quote/VTI:US」←これだと分かりにくいですからね!
わざわざ変数にしてURLに名前を付けなくても、プログラムは動いてくれます。
けど、今後プログラムを見返した時に、
こんなことにならないために名前を付けています。
requestsでHTML取得→BeautifulSoupへ渡す
requestsモジュールでTARGET_URL_VTIのHTMLデータを取得して、BeautifulSoupモジュールにデータを渡しています。
#requestsモジュールでTARGET_URL_VTIのHTMLを取得
html_VTI = requests.get(TARGET_URL_VTI)
#取得したHTMLを解析するシステムに渡す(BeautifulSoupの機能の1つ)
soup = BeautifulSoup(html_VTI.content, "html.parser")
ちなみに、requestsとBeautifulSoupを使ったスクレイピングでは必須のコードなので確実に覚えましょう!
欲しいデータだけ抽出
欲しいデータ、今回の場合はVTIの価格($)を変数soupから抽出します。
※soup = BeautifulSoup(html_VTI.content, “html.parser”)
#変数priceにdiv class=priceを指定
VTIprice = soup.find('div', class_='price')
スクレイピングをする上でHTMLを理解できるかどうかが問題になってきます。
今回のサイトを見てみると、ここに欲しい情報が載っています。
と言っても、PCは理解してくれません。
PCに理解してもらうためには、HTMLで指定してあげるしかありません。
この部分のHTMLをGoogleデベロッパーツールで確認しましょう。
この部分は<div class=price></div>で囲まれていることが分かります。
つまり、パソコンには
と伝えないといけません。
すると、
と抜き出してくれます。
この指示をPythonのBeautifulSoupのでは
soup.find(‘div’, class_=’price’)
こういう書き方になるわけです。
Googleデベロッパーツールの使い方は別の記事に書いているので参考にしてください。
スクレイピングだけでなく、今後のネットビジネスに必ず生きてきます!
★★★★★
初心者必見!Chromeの検証(デベロッパーツール)の基本的な使い方
★★★★★
抜き出した情報を画面に表示する
これは簡単ですよね。
どのPythonの教材でも一番最初のページに出てくるコードprintを使っています。
#変数priceを表示しなさい
print(VTIprice.text+"$")
BeautifulSoupで抜き出した「VTIprice.text」は文字列
円/USDの情報ページのHTML取得→BeautifulSoupへ
VTI価格を表示したときの内容とほぼ同じです。
#情報を取得するURL
TARGET_URL_yen = "https://nikkei225jp.com/fx/"
#requestsモジュールでTARGET_URL_yenのHTMLを取得
html_Yen = requests.get(TARGET_URL_yen)
#取得したHTMLを解析するシステムにHTMLを渡す
soup = BeautifulSoup(html_Yen.content, "html.parser")
変わっているところは、URLと変数の名前くらいのものです。
円/USDの為替情報を抜き出す
#変数dollarにdiv class=if_curを指定
dollar = soup.find_all('div', class_='if_cur')
print(dollar[2].text+"円")
注意するところは、今回のページには『’div’, class_=’if_cur’』は3つ存在しているということです。
なので、『soup.find』の後に『_all』をつけないと、1つだけしか抜き出してくれません。そして、_allをつけて抜き出すと、データはリスト型になります。
‘div’, class_=’if_cur'[1]:ダウ平均株価
‘div’, class_=’if_cur'[2]:為替 ドル円
円/USDの為替はリスト型のデータの3番目に格納されているので、[2]をつけるというわけです。
※リストは0から数え始めます
こういった細かい部分で、Pythonの基礎知識が生きてきます。
ただ、細かい部分の勉強ばかりしていても実際にどういった部分で使うのか理解できません。
プログラムを作る中でうまくいかない個所を調べる方がより自分の身に付きますよ!
VTI($)×$/円を表示する
このプログラムも基本中の基本が詰まっています。
#VTI価格($)とUSD/円を掛け合わせて表示する
print("VTI価格(円換算)"+(str(float(VTIprice.text)*float(dollar[2].text))+'円'))
文字列同士では計算できない⇒文字列を小数点型に変更
float(VTIprice.text)
float(dollar[2].text)
文字列と小数点型は結合できない⇒小数点型を文字列に変更
(str(float(VTIprice.text)*float(dollar[2].text))
これで結果が表示されたはずです。
一応実行方法も書いておきます。
Pythonプログラム実行方法
実行方法も最初のうちは分からないですよね。
Pythonだけでなく、プログラムは「コマンドプロンプト」で実行します。
cmdと検索して「コマンドプロンプト(cmd)」を開く。
ここで「Python プログラム名」を入力してEnterを押す。
ここでも1つ注意点があります。
そのため、実行してみる時は.pyプログラムが格納されているフォルダでcmdを起動するか、Pythonプログラムが置いてあるディレクトリのパスを入力するかどちらかが必要です。
好きな方法でやりましょう!
ディレクトリに関しては別の記事で詳しく説明しています。
https://himasugi.com/beginner-explained-a-directory-that-python-beginners-cant-understand
まとめ
どうでしょうか。
初歩中の初歩のスクレイピングプログラムを紹介しました。
それでも、自分が作ったプログラムがきちんとした結果を返してくれるのは嬉しいですよね!
今後はもっと難しいプログラムに挑戦してみてください!
こんな感じ!
というめんどくさがり屋さんは、この記事を読んで更なる自動化への道を進んでください。
https://himasugi.com/create-a-bat-file-that-runs-python-automatically
カッパ