PythonでBeautifulSoupを使って食べログ、スクレイピングやってみた!

python

皆さん、こんにちは。知也です。

キカガクに入社して1ヶ月が経ちました。
毎日が勉強で、ついていくのに必死ですが、しっかりと勉強に集中できる環境にしてもらっているので感謝ですね。

勉強の甲斐もあってか少しずつできることが増えてきた気がします。
今日はスクレイピングについて話して行こうと思います。

スクレイピングとは

Webサイトからデータを集める手法のこと

インターネットには天気、株価、写真など様々なWebサイトがありデータ収集にはうってつけですよね。
特に機械学習の分野においてはどうデータを集めるのかということが最初のポイントになりますのでスクレイピングを知っておいて損はないでしょう。

スクレイピングの大きな流れ

今回は私の大好きな食べログのサイトを使ってスクレイピングしていきたいと思います。※あくまで練習用なので、商業的に使う場合は各サイトの規約をご確認ください。

  • URLを読み込む
  • 読み込んだURLを解析
  • HTML、CSSの情報を元に情報を取得
  • for文で繰り返す

では早速コードを見て行きましょう!

x = []

for i in range(2):
    url = 'https://tabelog.com/tokyo/A1310/A131002/R2954/rstLst/{}/?SrtT=rt'.format(i+1) #ランキングページ毎に取得
    res = requests.get(url) #URLを取得
    soup = BeautifulSoup(res.content, 'html.parser') #HTMLを解析
    store_names = soup.select('.list-rst__rst-name') 
    
    for store in store_names:
        store = store.select_one('a')['href'] #aタグの中の店舗別URLを取得
        res1 = requests.get(store)
        soup1 = BeautifulSoup(res1.content, 'html.parser')
        tenmei = soup1.select_one('.display-name').text.split('\n')[2] #店名取得
        ganre = soup1.select('.linktree__parent-target-text')[2].text #ジャンル取得
        tell = soup1.select_one('.rstdtl-side-yoyaku__tel-number').text.split('\n')[1] #電話番号取得             
        x.append( [tenmei, ganre, tell])
        
df = pd.DataFrame(x, columns=('店名', 'ジャンル','電話番号')) #データフレーム化

今回は神田、居酒屋のランキング順に取得してみました。

ある程度形の決まったデータであればこのようにスクレイピングで情報を集めることができます。
しかし、途中電話番号がなかったりするとそこでエラーが発生してしまいますので、そこはエラーが発生した場合のif文を用意しないといけなそうです。

現段階ではそこまでコードを書くことができませんでしたので、今回はここまでとします。

自然言語処理でポジティブ、ネガティブ判定

本当は食べログの口コミを元にディープラーニングの1つの手法でもあるリカレントニューラルネットワークを使って予測したかったのですが、そこまで行くにはまだまだ時間がかかりそうです。

ブログが大分おろそかになっていたので、またどんどんアウトプットできるよう頑張ります!