私はhtmlから値を抽出し、それらをjson配列に変換しようとしています。これまでのところ、必要なものを取得できましたが、個別の文字列としてのみ取得できます。
2つのforループを実行しました。
for line in games_html.findAll('div', class_="product_score"):
score= ("{'Score': %s}" % line.getText(strip=True))
print score
for line in games_html.findAll('a'):
title= ("{'Title': '%s'}" % line.getText(strip=True))
print title
次の2つの出力が生成されます。
{'Title': 'Uncanny Valley'}
{'Title': 'Subject 13'}
{'Title': '2Dark'}
{'Title': 'Lethal VR'}
{'Title': 'Earthlock: Festival of Magic'}
{'Title': 'Knee Deep'}
{'Title': 'VR Ping Pong'}
そして
{'Score': 73}
{'Score': 73}
{'Score': 72}
{'Score': 72}
{'Score': 72}
{'Score': 71}
{'Score': 71}
(長いですが、これでアイデアを得ることができます...)
pythonを使用して、次のようなjson配列を作成するにはどうすればよいですか。
[{'Title': 'Uncanny Valley', 'Score': 73}, {....}]
結果の配列を使用して、後で他のことを行います。
ループのアイテムをリストに保存してからマージする必要がありますか?私のシナリオで与えられた例を説明していただけませんか?
私は今までbashしか使用していなかったので、これは私にとって本当にクールな学習体験です。 Pythonとてもセクシーに見えます。
スコアとタイトルの2つのリストを維持し、すべてのデータをそれらのリストに追加する必要があります。印刷するのではなく、それらのリストをリスト内包と共にZip
として追加し、目的の出力を次のように取得します。
import json
scores, titles = [], []
for line in games_html.findAll('div', class_="product_score"):
scores.append(line.getText(strip=True))
for line in games_html.findAll('a'):
titles.append(line.getText(strip=True))
score_titles = [{"Title": t, "Score": s} for t, s in Zip(titles, scores)]
print score_titles
# Printing in JSON format
print json.dumps(score_titles)