スクレイピングの練習に食べログからに掲載されている店舗情報の抽出を行いました。
pandasを組み合わせると簡単に実行可能でしたのでコードを紹介します。
最初に:規約の確認
スクレイピングを行う際は利用規約等を確認し、実行時点でスクレイピングが可能かをよく確認して実行してください。
実施内容
食べログの任意ワードで検索結果のURLを与えると、各店舗の下部に記載されている「感染症対策」「店舗基本情報」「特徴・関連情報」「席・設備」「メニュー」の各情報を収集・結合し、pandasのデータフレームで結果を返します。
実行コード
pandasのread_htmlを利用することで比較的簡単に実行可能です。
def tabelog_tempo_scrape(page_num,search_url,base_url ='https://tabelog.com/rstLst/'):
'''食べログで店舗情報を収集'''
# 全店舗のデータを格納するデータフレーム
all_df = pd.DataFrame()
for i in range(1, page_num):
print(f'----{i}ページ目の処理を開始--------')
# iページ目のURL
shop_list_url = base_url + str(i) + search_url
# 各店舗URLの取得
r = requests.get(shop_list_url)
soup_list = BeautifulSoup(r.content, "html.parser")
shops = soup_list.find_all(class_="list-rst__rst-name-target")
shop_url_list = [ x['href'] for x in shops ]
# 各店舗の情報を収集
for shop_url in shop_url_list:
df = pd.read_html(shop_url)
# 店舗情報のテーブルを取得して結合
shop_df = pd.DataFrame()
for j in [3,4,5,6,7]:
if len(df) > j:
info_df = df[j].T
info_df = info_df.set_axis(df[j][0], axis=1).drop(0)
shop_df = pd.concat([shop_df,info_df],axis=1)
else:
break
# 取得したデータを全データリストに追加
all_df = pd.concat([all_df,shop_df])
# 1店舗ごとに0.5秒まつ
time.sleep(0.5)
return all_df.reset_index(drop=True)
page_num = 60 # 任意のページ数
base_url = 'https://tabelog.com/rstLst/CC03/' # 任意のアドレス
search_url = '任意のアドレス'
df = tabelog_tempo_scrape(page_num,search_url)
コメント