私はいくつかのWebサイトのテーブルから取得したアイテムのリストを持っています。これをJSONに変換しました。私のアプローチは、次のとおりです。リストをPythonのJSON配列に変換する
r = requests.get("some_url")
soup = BeautifulSoup(r.content, "html.parser")
data = []
names = soup.find_all("keyword")
for name in names:
data.append(name.text)
table = soup.find_all("td")
for item in table:
item_text = item.text.strip()
data.append(item_text)
with io.open('data.json', 'w', encoding='utf8') as outfile:
json.dump(data, outfile, ensure_ascii=False)
これは私にこのような出力が得られた:私はこのような何かにそれを変換したい
["name", "component1", "unit value", "x", "y", "z", "component1", "unit value", "x2", "y2", "z2", "component2", "unit value", "x3", "y3", "z3", ...
を:
{
"table": {
"id":"1",
"title": "name",
"component1": [
{
"unit":"unit value",
"x value":"x",
"y value":"y",
"z value":"z"
},
{
"unit":"unit value",
"x value":"x",
"y value":"y",
"z value":"z"
}
],
"component2":[
{
"unit":"unit value",
"x value":"x",
"y value":"y",
"z value":"z"
}
]
...
}
}
どのように私は私のJSON出力をフォーマットすることができますこのような?
htmlファイル:
<table id="table">
<tr>
<th>component</th>
<th>unit</th>
<th>x value</th>
<th>y value</th>
<th>z value</th>
</tr>
<tr>
<td ><a href="#">
component1
</a> </td>
<td class="right ">unit</td>
<td class="right "><nobr>x </nobr></td>
<td class="right "><nobr>y </nobr></td>
<td class="right "><nobr>z </nobr></td>
</tr>
<tr>
<td class="alt"><a href="/#">
component1
</a> </td>
<td class="right alt">unit</td>
<td class="right alt"><nobr>x2 </nobr></td>
<td class="right alt"><nobr>y2 </nobr></td>
<td class="right alt"><nobr>z2 </nobr></td>
</tr>
<tr>
<td ><a href="#">
component2
</a> </td>
<td class="right ">unit</td>
<td class="right "><nobr>x3 </nobr></td>
<td class="right "><nobr>y3 </nobr></td>
<td class="right "><nobr>z3 </nobr></td>
</tr>
...
はどのようにあなたがそのようなPythonの辞書を構築するでしょう... JSONを忘れましたか?あなたが持っているのはリスト –
@ cricket_007なので、この種のデータ構造を作る方法はないと言っていますか? – Spootrick
@SpootrickあなたはあなたのHTMLテーブルをリストに変換するときに情報を失うことになります。その情報を失ってはいけません。それを利用して辞書を構築してください。あなたがhtmlテーブルを共有できるなら、私たちはあなたを助けることができるかもしれません。 –