質問内容
スクレイピングで取得したデータを、React.jsに渡す為、JSONファイルに出力したいです。
しかし、最後に取得したデータのみがループ回数分出力されてしまいます。
下記のコードでは3件の店舗情報を取得したのですが、これを店舗ごとにそれぞれ
別の辞書に保存したJSONファイルに出力するにはどのようにすれば良いでしょうか。
原因は辞書の変数"dict"を繰り返し使用している為と考えていますが、対策がわかりません。
ご回答の程、よろしくお願いいたします。
環境
Python: 3.9.6
コード
python
1import requests 2from bs4 import BeautifulSoup 3import re 4import time 5import json 6 7num = 1 8list = [] 9dict = {} 10 11for i in range(3): 12 url = "https://example.com/example/" + str(num) + "/" 13 page = requests.get(url) 14 soup = BeautifulSoup(page.text, "html.parser") 15 16 # 店舗情報を取得 17 name = soup.h2.string 18 area = soup.select("a.area")[0]["title"] 19 genre = soup.select("a.genre")[0]["title"] 20 21 # 辞書に追加 22 dict["name"] = name 23 dict["area"] = area 24 dict["genre"] = genre 25 list.append(dict) 26 27 # リストをJSONファイルへ出力 28 with open("mydata.json", mode="wt", encoding="utf-8") as file: 29 json.dump(list, file, ensure_ascii=False, indent=2) 30 31 num += 1 32 time.sleep(1)
json
1// 実際の結果 2 3[ 4 { 5 "name": "酒処えぐざんぷる", 6 "area": "えぐざんぷる地区", 7 "genre": "居酒屋", 8 }, 9 { 10 "name": "酒処えぐざんぷる", 11 "area": "えぐざんぷる地区", 12 "genre": "居酒屋", 13 }, 14 { 15 "name": "酒処えぐざんぷる", 16 "area": "えぐざんぷる地区", 17 "genre": "居酒屋", 18 }, 19]
json
1// 求めている結果 2 3[ 4 { 5 "name": "レストラン サンプル", 6 "area": "さんぷる地区", 7 "genre": "洋食", 8 }, 9 { 10 "name": "寿司 てすと", 11 "area": "てすと地区", 12 "genre": "和食", 13 }, 14 { 15 "name": "酒処えぐざんぷる", 16 "area": "えぐざんぷる地区", 17 "genre": "居酒屋", 18 }, 19]
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/16 14:12
2021/09/17 00:04
2021/09/17 01:06