動作環境
- Python 3.9.2
- pip 21.3.1
- macOS 12.0.1
じゃらんの口コミをPythonでスクレイピングしてCSVファイルとして取得する方法をまとめています。
インストールされているPythonのバージョンを確認する
macはデフォルトでPythonは内包されているはずなので、インストールされているPythonのバージョンを確認する。
Python2は既にサポートが終了しているようなので、Python3もインストールされているかも確認します。
$ python --version
Python 2.7.18
$ python3 --version
Python 3.9.2
pipのインストール
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2108k 100 2108k 0 0 10.1M 0 --:--:-- --:--:-- --:--:-- 11.0M
ディレクトリ配下にget-pip.py ファイルが作成されていれば成功です。
さらにget-pip.py ファイルが作成されているディレクトリ上で下記のコマンドを実行する
$ python3 get-pip.py
$ pip -V
pip 21.3.1 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
pipがインストールされていれば完了。
Jupyter Notebookをインストール
Jupyter Notebookとは、PythonなどをWebブラウザ上で記述・実行できる統合開発環境です。
$ pip install jupyter
requestsをインストール
requestsとはHTTP通信用のPythonのライブラリです。主にWEBスクレイピングでHTMLやXMLファイルからデータを取得するのに使われます。
$ pip install requests
pandasをインストール
Pandasは、Pythonでデータ分析を効率的に行うためのライブラリです。データをCSVなどのデータに変換する際に使用します。
$ pip install pandas
beautiful soup4をインストール
Beautiful SoupはHTMLやXMLファイルからデータを取得するPythonのライブラリです。
$ pip install beautifulsoup4
Jupyter Notebookを起動する
$ python3 -m notebook
これを実行するとブラウザが起動するので、右上の「新規」→「python3(ipykernel)」を選択する。
コードを記述&実行
Webブラウザ上で既にpythonの実行環境は構築されているので、コードを記述して、「Run」を押すとPythonプログラムは実行されます。
口コミを取得したい宿のURL(今回はこちら→https://www.jalan.net/yad332453/kuchikomi/?screenId=UWW3001&yadNo=332453&dateUndecided=1&smlCd=340902&distCd=01)
をrequests.get()に貼り付けるだけです。
ページから要素を取得し、ループを回して欲しい情報をデータ化しています。
実行後、ディレクトリ配下に「じゃらん.csv」が出来ていればOKです。
pythonのコードを書くのは初めてなので、ループ処理あたりはもっと簡潔に書けるかもしれないです。
import requests
from bs4 import BeautifulSoup
import pandas
r = requests.get("https://www.jalan.net/yad332453/kuchikomi/?screenId=UWW3001&yadNo=332453&dateUndecided=1&smlCd=340902&distCd=01")
c = r.content
soup = BeautifulSoup(c, "html.parser")
body=soup.find_all("p",{"class":"jlnpc-kuchikomiCassette__postBody"})
date=soup.find_all("p",{"class":"jlnpc-kuchikomiCassette__postDate"})
score=soup.find_all("div",{"class":"jlnpc-kuchikomiCassette__totalRate"})
l=[]
for d, b, s in zip(date, body, score):
data={}
data["スコア"]=s.text
data["口コミ"]=b.text
data["投稿日"]=d.text.replace('投稿日:', '')
l.append(data)
df=pandas.DataFrame(l)
df.to_csv("じゃらん.csv", encoding='utf_8_sig')
df
以上です。