前提・実現したいこと
次のようなコードを辞書型として次のようなCSVファイルで出力したいと思っております。
下記のようなコードを作成したのですが、printで表示するとうまく対象全部が抽出されるのですが、いざ辞書型としていれると、最後の一つ(ここでいうキモリ)しか抽出できません
対象すべてを辞書型として格納し、CSVファイルで抽出する方法についてご教授ください。
|ポケモン|ランク||
|:--:|:--:||
|アチャモ|なし||
|ミズゴロウ|A||
|キモリ|B||
||||
該当のソースコード
python
1soup = BeautifulSoup(page_source,"lxml") 2detail = {} 3for pokemon in soup.find_all("div", attrs={"class": "ttl-result-area"}): 4 name = pokemon.find("span",attrs={"class": "horizontal-rhythm"}).text.strip() 5 ranks = pokemon.find_all("span",attrs={"class": "lbl-ipo-decline"}) 6 if len(ranks)>0: 7 rank = ranks[0].text 8 else: 9 rank = "なし" 10 print(f"ランク={rank},ポケモン={name}") 11 detail['ポケモン'] = name 12 detail['ランク'] = rank 13 14#printの結果 15ランク=なし,ポケモン=アチャモ 16ランク=A,ポケモン=ミズゴロウ 17ランク=B,ポケモン=キモリ 18 19#detailの結果 20{'ポケモン': 'キモリ', 'ランク': 'B'}
追加のソースコード
python
1for pokemon in soup.find_all("div", attrs={"class": "ttl-result-area"}): 2 detail = {} 3 name = pokemon.find("span",attrs={"class": "horizontal-rhythm"}).text.strip() 4 ranks = pokemon.find_all("span",attrs={"class": "lbl-ipo-decline"}) 5 detail = {} 6 if len(ranks)>0: 7 rank = ranks[0].text 8 else: 9 rank = "" 10 print(f"rank={rank},name={name}") 11 detail['ポケモン'] = name 12 detail['ランク'] = rank 13#detailの結果 14{'ポケモン': 'キモリ', 'ランク': 'B'}
補足情報(FW/ツールのバージョンなど)
わかりづらいところばかりですが、質問いただければできるだけ早めに返答いたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/09 14:53
2021/10/09 15:35 編集
2021/10/09 15:39
2021/10/09 15:46
2021/10/09 16:09 編集
2021/10/09 16:21 編集
2021/10/09 16:30
2021/10/10 07:20 編集
2021/10/10 07:19
2021/10/11 23:21
2021/10/12 09:18
2021/10/12 17:26