Pythonでのスクレイピングの極意を解説!スクレイピングの基本的な使い方もわかりやすく紹介!
- システム
エンジニア - Pythonでのスクレイピングの使い方について教えてください。
- プロジェクト
マネージャー - 分かりました。Pythonでのスクレイピングの基本的な使い方についてご紹介しましょう。
スクレイピングとは?
スクレイピングとはWebサイトから自動的にデータを取得し、そのデータから必要な情報を抽出・加工することをいいます。中でもPythonはライブラリが充実しているので、スクレイピングの基本をマスターするのは比較的簡単といえます。
スクレイピングで可能なことは
スクレイピングは、Webサイトからの情報の収集であり、スクレイピングで可能なことは、例えば株式情報の収集や機械学習のための画像の収集など様々です。
ここでは、robots.txtでスクレイピングを許可されている「株投資メモ」サイトから情報の抽出を行います。robots.txtとはサイトのルートディレクトリに置かれているファイルで、そこにスクレイピングをAllow(許可)するのかDisallow(禁止)しているのかが書かれています。法に抵触しますので禁止のサイトは、スクレイピングはやめましょう。
スクレイピングの方法
スクレイピングするには、HTMLの知識が必要です。それは、スクレイピングはHTMLのタグを頼りに情報を収集するからです。
サイトからHTMLのタグごとに情報を収集し、それをタグを頼りに収集する情報を絞って欲しい情報を抽出することになります。
Pythonでのスクレイピングでよく使われるライブラリ
Pythonでのスクレイピングでよく使われるライブラリに、HTMLデータを取得するのにRequests、収集した情報からデータを抽出するのにBeautiful Soupなど、そして、JavaScriptを使用した動的なサイトからの情報収集やサイトへのログインにはSeleniumがよく知られています。
ここではRequestsとBeautiful Soup、そしてエクセルを操作するOpenPyXLを利用します。
スクレイピングの実践
株式投資メモからの株価の情報を収集します。そして、収集した株価をエクセル・ファイルに保存します。その一連のことをPythonのライブラリを利用して、スクレイピングで自動的に行うのです。
Requestsをインストール
Python3がインストールされていて、パスも通っていることを前提にします。ライブラリRequestsをインストールします。環境はWindows10で、PowerSellを使用します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
PS C:\> py -m pip install Requests Collecting Requests
Downloading requests-2.25.1-py2.py3-none-any.whl (61 kB)
|████████████████████████████████| 61 kB 79 kB/s
Collecting urllib3<1.27,>=1.21.1
Downloading urllib3-1.26.2-py2.py3-none-any.whl (136 kB)
|████████████████████████████████| 136 kB 11 kB/s
Collecting idna<3,>=2.5
Downloading idna-2.10-py2.py3-none-any.whl (58 kB)
|████████████████████████████████| 58 kB 47 kB/s
Collecting certifi>=2017.4.17
Downloading certifi-2020.12.5-py2.py3-none-any.whl (147 kB)
|████████████████████████████████| 147 kB 24 kB/s
Collecting chardet<5,>=3.0.2
Downloading chardet-4.0.0-py2.py3-none-any.whl (178 kB)
|████████████████████████████████| 178 kB 28 kB/s
Installing collected packages: urllib3, idna, certifi, chardet, Requests
Successfully installed Requests-2.25.1 certifi-2020.12.5 chardet-4.0.0 idna-2.10 urllib3-1.26.2
WARNING: You are using pip version 20.2.3; however, version 21.0 is available.
You should consider upgrading via the 'D:\Programs\Python\Python39\python.exe -m pip install --upgrade pip' command.
|
pipのバージョンが古いと警告が出ましたので、pipをバージョンアップしておきます。
1
2
3
4
5
6
7
8
9
|
PS C:\> py -m pip install --upgrade pip Collecting pip
Downloading pip-21.0-py3-none-any.whl (1.5 MB)
|████████████████████████████████| 1.5 MB 17 kB/s
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 20.2.3
Uninstalling pip-20.2.3:
Successfully uninstalled pip-20.2.3
Successfully installed pip-21.0
|
Beautiful Soupのインストール
次のコマンドをPowerShellに打ち込みます。
1
2
3
4
5
6
7
|
PS C:> py -m pip install beautifulsoup4 Collecting beautifulsoup4
Downloading beautifulsoup4-4.9.3-py3-none-any.whl (115 kB)
|████████████████████████████████| 115 kB 273 kB/s
Collecting soupsieve>1.2
Downloading soupsieve-2.1-py3-none-any.whl (32 kB)
Installing collected packages: soupsieve, beautifulsoup4
Successfully installed beautifulsoup4-4.9.3 soupsieve-2.1
|
OpenPyXLのインストール
次のコマンドをPowerShellに打ち込みます。
1
2
3
4
5
6
7
8
9
10
11
|
PS C:> py -m pip install openpyxl Collecting openpyxl
Downloading openpyxl-3.0.6-py2.py3-none-any.whl (242 kB)
|████████████████████████████████| 242 kB 939 kB/s
Collecting jdcal
Downloading jdcal-1.4.1-py2.py3-none-any.whl (9.5 kB)
Collecting et-xmlfile
Downloading et_xmlfile-1.0.1.tar.gz (8.4 kB)
Using legacy 'setup.py install' for et-xmlfile, since package 'wheel' is not installed.
Installing collected packages: jdcal, et-xmlfile, openpyxl
Running setup.py install for et-xmlfile ... done
Successfully installed et-xmlfile-1.0.1 jdcal-1.4.1 openpyxl-3.0.6
|
Pythonのプログラムのソースコード
いよいよPythonによるスクレイピングの実践です。次のソースコードが株式投資メモサイトから株価の情報を収集し、それをエクセル・ファイルに保存するソースコードです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#ライブラリをインポート
from bs4 import BeautifulSoup
import requests
import openpyxl
#調べたいデータを指定
code = 調べたい銘柄コード
year = 調べたいデータの年号
#URLを取得
url = "https://kabuoji3.com/stock/"+str(code)+"/"+str(year)+"/"
headers = {"User-Agent": "自分のユーザーエージェントを記入"}
soup = BeautifulSoup(requests.get(url, headers = headers).content,'html.parser')
title = soup.select_one("span.jp").text
#Excelファイルを作成
wb = openpyxl.Workbook()
ws = wb.active
ws.title = str(title)
ws['A1'].value = '日付'
ws['B1'].value = '始値'
ws['C1'].value = '高値'
ws['D1'].value = '安値'
ws['E1'].value = '終値'
ws['F1'].value = '出来高'
ws['G1'].value = '終値調整'
#株価を取り出す
all_tr = soup.find_all('tr')
for i in range(1,len(all_tr)):
tr = all_tr[i].find_all('td') #リスト型
for n,td in enumerate(tr, 1):
new_cell = ws.cell(row=(i+1), column=n)
new_cell.value = td.text
#ワークブックをExcelファイルとして保存
wb.save(str(title)+'.xlsx')
|
ソースコードの解説
ソースコードの解説をしていきますが、コメントに書いてあるとおりです。Pythonによるスクレイピングはライブラリを利用するので、型が決まっていて、ここに書いたソースコードを利用すれば、スクレイピングが許可されているサイトから情報の収集は可能です。
1
2
3
4
5
|
#調べたいデータを指定
code = 調べたい銘柄コード
year = 調べたいデータの年号
|
の2021年度を調べます。
ユーザーエージェントの記入
ソースコードにはユーザーエージェントの記入箇所があります。ユーザーエージェントは次のサイトの「現在のブラウザー」の箇所がユーザーエージェントになります。
個人的ですが、私の場合は次がユーザーエージェントでした。
1
|
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.142 Safari/537.36
|
Pythonのプログラムを走らせる
それでは必要箇所の記入が終わりましたので、ソースコードを適当なところに、例えばscraping.pyとして保存し、プログラムをコンパイルします。
1
|
>py scraping.py
|
すると同じディレクトリに「7832 (株)バンダイナムコホールディングス.xlsx」ファイルが生成されているはずです。それを開くとプログラムを走らせた日までの株価のデータが抽出されています。
それをグラフにするなど加工すれば、価値あるデータに変身です。
- システム
エンジニア - Pythonでのスクレイピングの使い方、よく分かりました。
- プロジェクト
マネージャー - スクレイピングをマスターすれば、いろいろと応用が利き、様々なデータの収集が可能ですので、ぜひスクレイピングに興味のある方は挑戦してください。
最後に
Pythonによるスクレイピングは、ほとんどがライブラリに依存していますので、ソースコードはここで紹介したもので十分に応用が利きます。ただし、現在では多くのサイトでスクレイピングが禁止されていますので、法を犯さないように気を付けてスクレイピングを試してください。
また、Pythonに興味のある方は、一度はスクレイピングに挑戦してみてはいかがでしょうか。得るところが多くあります。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)