その他

じゃらんの口コミをスクレイピングしてみる【Python】

動作環境

  • 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

以上です。

  • この記事を書いた人

コウダイ

都内のWeb系自社開発企業に勤務するエンジニア|33歳1児のパパ|ブログ歴4年→月間6,000PV|新卒で手取り18万のホテルマン6年→プログラミングを900時間勉強→100社以上応募しアラサー未経験から7ヶ月でフルリモートのWEB系自社開発エンジニアに転職し年収100万円UP|【人生を自由に、ノンストレスで生きる】をテーマに、30歳で文系・異業種未経験からITエンジニアに転職したノウハウの他、プログラミングやブログで稼ぐ方法など、「時間や場所に縛られずに稼ぐ」方法を発信しています。

-その他