Python初心者による食べログのスクレイピング

2020.8.7 ALHブログ

皆さん、こんにちは!DSUの石塚です。

始めに、皆さんに質問があります!

ごはんを食べるお店を探すってなったら、どんな手段で検索しますか?

多くの方が「食べログ」「ぐるなび」といったサイトでお店を探す方が多いのではないでしょうか。
行ってみたいお店が複数ある場合は口コミの評価が良いほうに決定したりすることも多いのではないでしょうか。

口コミと言っても、一つずつ確認していくのは大変な作業です。時間もかかりますし手間です。
そんな問題を解決して美味しいお酒を飲めるお店を見つけ出すため、Pythonを駆使したスクレイピングを作成しました。

そもそも、スクレイピングって何?

簡単に言うと、Webページの情報を取得することができる技術のことです。

例えば、Amazonで商品を買いたいけど、レビューの情報だったり似たような商品が多くて判断に困りませんか。
株価を知りたいけど毎日確認を手動で繰り返していくのは面倒ですよね。
そんな場面で、Pythonを駆使したWebスクレイピングを行えば、指定した文字ファイルデータなどをプログラムで自動収集することができるようになるんです!

そんな便利な機能があるなら、さっそくスクレイピングを行ってみよう!となりますよね。
ここで注意してほしいのが、スクレイピングを行うにあたって注意すべきルールがあるということです。

スクレイピング使用の注意点
適切にスクレイピングするためにも、注意する点は大きく分けて4つあります。

1.利用目的
2.スクレイピングの対象
3.アクセス制限の遷守
4.利用規約

それぞれの注意点について、順にお話していきます。

1.利用目的
どのような利用目的でスクレイピングを行うかということをきちんと決めておくことが必要です。著作権法は、あくまで「情報解析」を目的としている場合にかぎっては、著作権者の同意を受ける必要はないとしています。しかし、利用目的が情報解析以外の目的として、著作権者の同意を得ることなく、スクレイピングを行うことは著作権法違反です。

2.スクレイピングの対象
スクレイピングの対象は、文章や画像、音声、映像などがあげられます。
例えば、文章や画像を丸パクリしたり、ライセンス付与が不明確な音声・映像を使用すると、著作権法に違反する可能性があります。そのため、文章や画像については、一部のみとし、音声や映像については正式にオープンライセンスとしているものをスクレイピングの対象として使用することが大切です。

3.アクセス制限の遷守
クローラーに対し、アクセス制限のためのファイルとして「robots.txt」というものがあります。スクレイピングを行う際には、このファイルにある制限内容を守りましょう。制限を超えたアクセスが発生すると場合によっては、偽計業務妨害罪といった刑法上の容疑が発生することがあります。

4.利用規約
サイトの利用規約同意後、規約の中に「スクレイピング禁止」と記載があったにもかかわらず、スクレイピングを行うと利用規約違反となります。最悪の場合、民事上の損害賠償を請求されることに発展します。
スクレイピングしようとするサイトに利用規約があれば、この点をきちんと確認することが必要です。

スクレイピングは、それ自体は違法ではありません。注意が必要なのは、そこから派生する法的な問題点です。

注意点をしっかり守って、スクレイピングを有効活用していきましょう!

スクレイピングのコードを書いてみた!

注意事項をしっかりと確認し、実際に「食べログ」のサイトを使用して評価の高いバーの情報を取得してみました。

実施手順
  1. 食べログから「東京」「バー」でお店の絞り込みを行い、ランキング一覧ページから店名、ジャンル、評価点、口コミ件数を取得する。
  2. 各店舗の口コミページから口コミのデータを取得する。
  3. 取得したデータをpandasのデータフレームに格納する。

まずは、どのエリアでどういったジャンルを調べたいか絞り込みを行います。その後、絞り込んだデータを使って次に記載されるソースコードに当てはめていきます。

▼ソースコード内の値変更箇所
適宜、自分が気になるジャンルで値の当てはめを実施してください。
今回は、データ一覧をログファイル名にして使用しています。

point01

また、対象のジャンルの他にも口コミ件数や評価を設定することもできます。

point02

完成したソースコードを動かしてみた!

今回は以下の実行環境で動かしてみました。

・macOS 10.13.6
・Python 3.8
・Jupyter NoteBook

ソースコードはエディタ(Atom)で実装して、実行はJupyter NoteBookです。

zikkou

写真にもある通り、とっても時間がかかりました。今回は8時間かかっていますね。
気になる実施結果はこんな感じです!

kekka
※食べログ規約にもとづき口コミにはモザイクをいれています。

情報はしっかりと取得できていました!

結果としては、「東京都」で「バー」のお店を食べログでランキング検索して1200件中492件のデータを取得し、総口コミ数は7113件となりました。
1200件中492件だけを抽出した理由は上記でも述べているように、バーとそれに準ずるお店を選別したためです。ランキングの中にはイタリアンや、フレンチなどのお店も含まれていました。

Pythonを使ったスクレイピングの感想

今回は食べログからスクレイピングしてお店の情報や口コミを取得することができました。
取得したデータからお店の特徴量は抽出できると思うが、カクテルの種類に対するデータが少ないため、他のサイトからカクテルレシピデータを取得する必要がありそうです。
また、データの抽出時間についても時間がかかってしまったため、どうにか短縮できる方法を調べていきたいと思いました。

世間では、外出自粛により旅行に行けなかったり、外出が難しい日々が続いています。
晴れて外に出やすい環境になったときに、外出先の調査としてスクレイピングで情報収集してみてはいかがでしょうか?

私は、今までにないくらい食べログのサイトを見たのでバーに行って美味しいお酒を飲みたい欲が高まってしまいました(笑)

石塚 雄二(いしづか ゆうじ)
ALH株式会社 Development Scale Unit (通称:DSU)所属。
中途入社。美味しいお酒は何でも好きです。
特にクラフトジンが好き。燻製も作ります。
Pythonとデータマイニングを勉強中。