こんにちは、おかてんです。
先日、Dai(@never_be_a_pm)さんのnoteでWebスクレイピングを勉強して、自分でも何か作ってみようと思いまして、食べログサイトでWebスクレイピングしてみました。
食べログで何をスクレイピングしようかなと思った時に、やはり気になるのはお店の点数とレビューですよね。
なので、今回は食べログでジャンル検索した時にのお店情報をスクレイピングしてみます。
例えば、東京 居酒屋などのジャンルで検索した時に出てくる全てのお店の点数とレビューを付きでファイルとしてダウンロードしてみます。
さっそくWebスクレイピング
まずは食べログのサイトを見てみます。
自由なキーワードを入力して検索しても良かったのですが、URLが長くなったので用意されているキーワードで検索してみました。
今回はエリアを「大阪府」、ジャンルを「とんかつ」に指定。
このキーワードでたどり着いたURL(https://tabelog.com/osaka/rstLst/tonkatsu/)を使ってWebスクレイピングしてみました。
作成したソースコードはこんな感じ。開発環境はGoogle Colaboratoryを使いました。
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 40 41 42 |
from bs4 import BeautifulSoup import requests import pandas as pd from google.colab import files def tabelog_search(tabelog_url): columns = ["name","url","star","review"] df = pd.DataFrame(columns=columns) html_doc=requests.get(tabelog_url).text soup = BeautifulSoup(html_doc,"html.parser") tags = soup.find_all("a",{"class":"list-rst__rst-name-target cpy-rst-name"}) for tag in tags: name = tag.text url = tag.get("href") star= str(get_star(url)) review = get_review(url) se = pd.Series([name,url,star,review],columns) df = df.append(se,ignore_index=True) return df def get_star(url): html_doc = requests.get(url).text soup = BeautifulSoup(html_doc, 'html.parser') star = soup.find_all("span",{"class":"rdheader-rating__score-val-dtl"}) return star[0].text def get_review(url): html_doc = requests.get(url+"dtlrvwlst").text soup = BeautifulSoup(html_doc, 'html.parser') tags = soup.find_all("a",{"class":"rvw-item__title-target"}) urls = "" for tag in tags: url = tag.get("href") urls += "https://tabelog.com" + url + "\n" return urls tabelog_url = "https://tabelog.com/osaka/rstLst/tonkatsu/" search_results_df = tabelog_search(tabelog_url) filename = "result_tabelog.csv" search_results_df.to_csv(filename, encoding = 'utf-8') files.download(filename) |
get_star関数とget_review関数でそれぞれ評価・口コミを取得しています。
出力されたファイルがこちら!
(※店名はモザイクをかけています)
各列は以下のようになっています。
name・・・店名
url・・・食べログ内のお店のURL
star・・・評価
review・・・口コミが書かれてあるURL(1件ずつ)学べるUdemyのオススメ講座3選
表示されたお店を上から順に取り出し、それに対応するURLと点数、口コミ(1件ずつURLで)を表示してみました。
Webスクレイピングめっちゃ楽しい〜。Pythonのスキルはもちろんのこと、ホームページのhtmlを確認しながらプログラミングするので、htmlのスキルも同時につきますね。