前提
pythonもteratailも初心者なので、
質問に際し、至らぬ点があったら申し訳ありません。
学校の課題で"負荷をかけない程度"に食べログのスクレイピングをしているのですが、
調べても解決の糸口が見つけれらず困っているので、質問させていただきます。
実現したいこと
①「店名」「点数」を抽出
② データフレーム化
③ 点数が存在しない店の「点数」はハイフンとする
④ データフレームをcsvで出力
発生している問題・エラーメッセージ
■問題点
・点数の存在しない店があるため、取得した情報を.textで辞書に格納出来ない
・出力されるファイルは、点数はタグ形式、点数が無い場合はNoneになっている
■解決策の案1
上記①の抽出段階で、点数が存在しない店の点数をハイフンにして.textで辞書格納し、データフレーム化
■解決策の案2(案1が出来なければ)
とりあえず.textではない形式で辞書格納してデータフレーム化、DF上で、タグ形式で格納されている点数をテキストに、Noneをハイフンに置換
該当のソースコード
# ライブラリのインポート from time import sleep from bs4 import BeautifulSoup import requests import pandas as pd # 変数urlにホームページのURLを格納する url='https://tabelog.com/rstLst/{}/?svd=&svt=1900' # 変数d_listに空のリストを作成する d_list = [] # アクセスするためのURLをtarget_urlに格納する for i in range(1, 2): target_url = url.format(i) # target_urlへのアクセス結果を、変数rに格納 r = requests.get(target_url) sleep(1) # 取得結果を解析してsoupに格納 soup = BeautifulSoup(r.text) #口コミをを取得する contents = soup.find_all('div', class_=('list-rst__contents')) # 店名、点数をforループで取得 for content in contents: # 店名を変数nameに格納する name=content.find('h3',class_='list-rst__rst-name') # 点数を変数rateに格納する rate=content.find('span',class_='c-rating__val c-rating__val--strong list-rst__rating-val') # 取得したすべての情報を辞書に格納する d = { 'name': name.text, 'rate': rate } # 取得した辞書をd_listに格納する d_list.append(d) # 変数d_listを使って、データフレームを作成する df = pd.DataFrame(d_list)
試したこと
案1:if文でNoneはハイフンそれ以外はテキスト部分のみ抜き出そうとしましたが、エラーが出ました
案2:Noneをハイフンに変換する方法は分かったものの、タグ形式をテキストにする方法が見つかりませんでした
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答1件
あなたの回答
tips
プレビュー