こんにちは、さすを(@sasuwo0409)です。
いきなりですが、
Webスクレイピングで業務効率化したい!
Webスクレイピングの副業を始めてみたい!
と思ってはいませんか?
今回の記事は、PythonでWebスクレイピングする方法を解説していきます。
サンプルコードも載せているので、実際に試してみることも可能です。
それでは本文をどうぞ。
Webスクレイピングを学びたいけど、やり方がわからなくて困ってる。
手順をサンプルコードを見ながら教えて欲しいな。
この悩みを解決します!
※0円のサンプルテキストという近道
独学よりプログラミングスクールの方が効果は出やすいですが、値段が高く、なかなか手を出しづらいですよね。techgymでは無料のサンプルテキストと解説動画をもらえるので、これを使ってお得にPythonの基礎を学ぶのもオススメです。
最短1分でできる!
1.Webスクレイピングとは
Webスクレイピングとは、Webサイトから情報を抽出するコンピュータソフトウェア技術のことです。
少し堅苦しい表現になってしまいましたが、要は「サイトにある必要な情報を取ってくる技術」ということです。
Webスクレイピングをすることで、効率的に大量の情報を集めることができたり、サービス開発に利用することができます。
Webスクレイピングを身に着けると副業ができる
企業が成功するためには情報を手にすることが必要不可欠です。
Webスクレイピングは、欲しい情報を自動でWebサイトから抽出することができるので、とても需要があります。
たとえば、クラウドソーシングで有名なココナラを見てみると、このような案件があります。
Webスクレイピングは基本を習得すれば、あとはそれの繰り返しです。なので、月に数万円~十数万円稼ぐことはそう難しくありません。
そのほかの案件を見てみたい方は、以下を参考にしてみてください。
PythonでWebスクレイピングする際の注意点
Webスクレイピングはすべてのサイトでやってよいとは限りません。
利用規約等で禁止されているサイトもあるので、Webスクレイピングをする前にしっかり確認しましょう。
禁止されているサイトをスクレイピングした場合、アカウントが凍結されたり、捕まる可能性があります。
スクレイピング禁止サイトの代表例:
- Amazon
- 楽天市場
- Yahoo!ファイナンス
- Wantedly
- NewsPicks
2.PythonでWebスクレイピングする手順【サンプルあり】
今回スクレイピングするWebサイトは「ぽけもん図鑑」です。
上記サイトの画像・番号・名前を自動で取得していきたいと思います。
そして、Webスクレイピングをするときは、以下の手順が必要です。
- 画像を格納するフォルダを作成する(画像を取得したい場合)
- Webサイトの構造を把握する
- プログラムを書いていく
その①:画像を格納するフォルダを作成する
まず初めに、画像を保存するフォルダを作成しましょう。
今回は、プログラムが格納されているGoogle Colabフォルダ直下にimgフォルダを作成しています。
また、imgフォルダの中にpokemonフォルダを作っています。
Google Colab
—–scraping.ipynb(これから作るスクリプト)
—–img
———–pokemon
フォルダ構成を変更してもOKですが、後述するプログラムの保存先フォルダ名が変わるので注意してください。
その②:Webサイトの構造を把握する
Chromeでスクレイピングしたいサイトページを開いて「Ctrl + U」を押すと、サイトのソースコードを見ることができます。
そして、必要な情報がどこに書かれているか探すと、以下の赤枠の部分だということがわかります。
どのページも同じ作りになっているので、この情報を繰り返し取得できればOKです。
その③: プログラムを書いていく
サイトのソースコードのどの部分を取得すればいいのかがわかったので、プログラムを書いていきます。
今回はGoogle Colaboratory上でプログラムを動かしていきます。
Google Colaboratoryの使い方については「【3分で解決!】Google Colaboratoryの使い方【無料ですぐにPythonを使えます】」で解説しています。
ローカルに落とす方法は後述します!
ローカル環境でPythonが使えて、容量も気にしない人はローカルでやった方が楽だワン!
Webスクレイピングで画像・番号・名前を自動で取得するプログラムは下記の通りです。
#ドライブをマウントする
from google.colab import drive
drive.mount('/content/drive')
補足:
上記のコマンドを実行すると、以下の画面が現れます。手順通りに操作すればOKです。
1.URLを押下
2.希望のアカウントを選択
3.ログインを押下
4.コードをコピーし、「Enter your authorization code」に入力
#カレントディレクトリに移動
%cd "/content/drive/My Drive/Google Colab"
from bs4 import BeautifulSoup
import urllib.error
import urllib.request
import time
import re
import os
#画像の保存場所
download_dir = 'img/pokemon'
#ユーザーエージェント設定(コピペOK)
ua = 'Mozilla/5.0(Macintosh; Intel Mac Os X 10_12_3)'
'AppleWebKit/537.3.(KHTML,Like Gecko)'
'Chrome/55.0.2883.95 Safari/537.36'
#画像のURLにアクセスして保存する関数
def download_img(url,dst_path):
try:
data = urllib.request.urlopen(url).read()
with open(dst_path,mode='wb') as f:
f.write(data)
except urllib.error.URLError as e:
print("エラーが発生しました。")
print(e)
#001~898までのリストを作成
number_list = {'{:03}'.format(i) for i in range(1,898)}
#欲しい情報があるURLの取得
url_list = ['https://zukan.pokemon.co.jp/detail/{0}.htm'.format(number) for number in number_list]
#繰り返し処理
for url in url_list:
time.sleep(0.5)
#URLのHTMLから画像のURLを取得(Chrome上でCtrl + U した情報)
req = urllib.request.Request(url,headers = {'User-Agent':ua})
html = urllib.request.urlopen(req)
soup = BeautifulSoup(html,"html.parser")
#画像のURLを取得
images = str(soup.find("meta",property="og:image"))
target = '"'
idx = images.find(target)
images = images[idx+1:]
box_end = images.index('"')
images_url = images[0:box_end]
#ナンバーを取得
number = str(soup.find("meta",property="og:url"))
#開始位置
target = '"'
idx = number.find(target)
number = number[idx+1:]
box_start = number.index('detail/')
#終了位置
box_end = number.index('htm')
number = number[box_start+7:box_end-1]
#名前を取得
name = str(soup.find("meta",property="og:title"))
#開始位置
target = '"'
idx = name.find(target)
name = name[idx+1:]
#終了位置
box_end = name.index('|')
name = name[:box_end]
#保存ファイル名の設定
dst_path = os.path.join(download_dir + '/' + str(number) + '.png')
#画像保存
download_img(images_url,dst_path)
print(name + "!ゲットだぜっ!")
print("処理が完了しました。")
実行結果:
作成したフォルダをローカルに落とす方法
作成したフォルダをローカルに落としたい場合は、フォルダを右クリックし「ダウンロード」をクリックすればOKです。
圧縮形式(.zip)でダウンロードされます!
最後に:めんどうなことは機械に頼もう
Google Colaboratoryを使ってPythonでWebスクレイピングする方法解説してきました。
今回の作業をすべて手作業で行うとしたら数日かかると思いますが、Webスクレイピングをしたら、たった30分でできました。
改めて振り返ると、Webスクレイピングをはじめとした自動化の凄さを痛感しますね。
というわけで、これからもめんどうなことを減らせるようにコツコツとプログラムを書いていこうと思います。
この記事が少しでも役に立っていたらうれしいです!
それでは!
最短1分でできる!
コメント