質問編集履歴
7
微修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -72,7 +72,9 @@
|
|
72
72
|
|
73
73
|
|
74
74
|
|
75
|
-
--
|
75
|
+
---------
|
76
|
+
|
77
|
+
|
76
78
|
|
77
79
|
attakeiさん回答ありがとうございます。
|
78
80
|
|
6
返信
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,3 +1,79 @@
|
|
1
|
+
attakeiさん再び回答ありがとうございます。
|
2
|
+
|
3
|
+
だいぶスッキリとコードが書けるようになりました。
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
addressのdictのkeyの部分;
|
8
|
+
|
9
|
+
address.append({li.attrs.get('class')[0]: li.text})
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
はもっと綺麗に書く方法はないでしょうか?
|
14
|
+
|
15
|
+
liのclassを取得したいだけなのに
|
16
|
+
|
17
|
+
attrs.get('class')[0]
|
18
|
+
|
19
|
+
こういうのしか思い当たりませんでした。
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
これが最善であれば、このままベストアンサーにさせていただきます。
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
```python
|
28
|
+
|
29
|
+
profile = []
|
30
|
+
|
31
|
+
soup = BeautifulSoup(html, "html.parser")
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
for div in soup.select(".profile"):
|
36
|
+
|
37
|
+
name = div.h3.text
|
38
|
+
|
39
|
+
hobby = []
|
40
|
+
|
41
|
+
address = []
|
42
|
+
|
43
|
+
for a in div.select('ul.hobby > li > a'):
|
44
|
+
|
45
|
+
hobby.append(a.text)
|
46
|
+
|
47
|
+
for li in div.select('ul.address > li'):
|
48
|
+
|
49
|
+
address.append({li.attrs.get('class')[0]: li.text})
|
50
|
+
|
51
|
+
profile.append({"name": name, "hobby": hobby, "address": address})
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
print(profile)
|
56
|
+
|
57
|
+
```
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
```python
|
62
|
+
|
63
|
+
[
|
64
|
+
|
65
|
+
{'name': '山田太郎', 'hobby': ['サッカー', 'ドライブ'], 'address': [{'city': '東京都'}, {'ward': '新宿区'}, {'town': '西新宿'}]},
|
66
|
+
|
67
|
+
{'name': '鈴木花子', 'hobby': ['手芸', '料理', '旅行'], 'address': [{'city': '大阪市'}, {'ward': '中央区'}]}
|
68
|
+
|
69
|
+
]
|
70
|
+
|
71
|
+
```
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
--
|
76
|
+
|
1
77
|
attakeiさん回答ありがとうございます。
|
2
78
|
|
3
79
|
追加で質問させてください。
|
5
勘違いがあったので修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
a
|
1
|
+
attakeiさん回答ありがとうございます。
|
2
2
|
|
3
3
|
追加で質問させてください。
|
4
4
|
|
4
微修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -31,8 +31,6 @@
|
|
31
31
|
---------------------------
|
32
32
|
|
33
33
|
html = """
|
34
|
-
|
35
|
-
<div>
|
36
34
|
|
37
35
|
<div class="profile">
|
38
36
|
|
@@ -81,8 +79,6 @@
|
|
81
79
|
</ul>
|
82
80
|
|
83
81
|
</div>
|
84
|
-
|
85
|
-
<dib>
|
86
82
|
|
87
83
|
"""
|
88
84
|
|
3
追加の質問
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,3 +1,119 @@
|
|
1
|
+
argiusさん回答ありがとうございます。
|
2
|
+
|
3
|
+
追加で質問させてください。
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
ul要素が複数あった場合、最初の要素は取れましたが、
|
8
|
+
|
9
|
+
二つ目以降の取り方がわかりませんでした。
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
下のコードで取れたデータ:
|
14
|
+
|
15
|
+
[{'name': '山田太郎', 'hobby': ['サッカー', 'ドライブ']},
|
16
|
+
|
17
|
+
{'name': '鈴木花子', 'hobby': ['手芸', '料理', '旅行']}]
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
期待する出力は:
|
22
|
+
|
23
|
+
[{'name': '山田太郎', 'hobby': ['サッカー', 'ドライブ'], 'address': [{'city': "東京都"}, {'ward': "新宿区"}, {'town': "西新宿"}]},
|
24
|
+
|
25
|
+
{'name': '鈴木花子', 'hobby': ['手芸', '料理', '旅行'], 'address': [{'city': "大阪市',}, {'ward': '中央区'}]}]
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
---------------------------
|
32
|
+
|
33
|
+
html = """
|
34
|
+
|
35
|
+
<div>
|
36
|
+
|
37
|
+
<div class="profile">
|
38
|
+
|
39
|
+
<h3>山田太郎</h3>
|
40
|
+
|
41
|
+
<ul class="hobby">
|
42
|
+
|
43
|
+
<li><a href="#">サッカー</a></li>
|
44
|
+
|
45
|
+
<li><a href="#">ドライブ</a></li>
|
46
|
+
|
47
|
+
</ul>
|
48
|
+
|
49
|
+
<ul class="address">
|
50
|
+
|
51
|
+
<li class="city">東京都</li>
|
52
|
+
|
53
|
+
<li class="ward">新宿区</li>
|
54
|
+
|
55
|
+
<li class="town">西新宿</li>
|
56
|
+
|
57
|
+
</ul>
|
58
|
+
|
59
|
+
</div>
|
60
|
+
|
61
|
+
<div class="profile">
|
62
|
+
|
63
|
+
<h3>鈴木花子</h3>
|
64
|
+
|
65
|
+
<ul class="hobby">
|
66
|
+
|
67
|
+
<li><a href="#">手芸</a></li>
|
68
|
+
|
69
|
+
<li><a href="#">料理</a></li>
|
70
|
+
|
71
|
+
<li><a href="#">旅行</a></li>
|
72
|
+
|
73
|
+
</ul>
|
74
|
+
|
75
|
+
<ul class="address">
|
76
|
+
|
77
|
+
<li class="city">大阪市</li>
|
78
|
+
|
79
|
+
<li class="ward">中央区</li>
|
80
|
+
|
81
|
+
</ul>
|
82
|
+
|
83
|
+
</div>
|
84
|
+
|
85
|
+
<dib>
|
86
|
+
|
87
|
+
"""
|
88
|
+
|
89
|
+
profile = []
|
90
|
+
|
91
|
+
soup = BeautifulSoup(html, "html.parser")
|
92
|
+
|
93
|
+
for div in soup.select(".profile"):
|
94
|
+
|
95
|
+
name = div.h3.text
|
96
|
+
|
97
|
+
hobby = []
|
98
|
+
|
99
|
+
for a in div.ul.findChildren("a"):
|
100
|
+
|
101
|
+
hobby.append(a.text)
|
102
|
+
|
103
|
+
profile.append({"name": name, "hobby": hobby})
|
104
|
+
|
105
|
+
print(profile)
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
==============前回の質問==============
|
116
|
+
|
1
117
|
例えば下のようなHTMLがあっとして、二人のプロフィールを次のようなjson形式で保存したいと考えています。
|
2
118
|
|
3
119
|
{[name: "山田太郎", comment: "よろしくお願いします", age: 26, address: "東京都"], [name: "鈴木花子", comment: "よろしくお願いします", age: 20, address: "大阪府"]}
|
2
コードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -48,7 +48,7 @@
|
|
48
48
|
|
49
49
|
試したこと:
|
50
50
|
|
51
|
-
for name
|
51
|
+
for name in soup.select(".profile > h3")
|
52
52
|
|
53
53
|
print(name.text)
|
54
54
|
|
1
微修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -54,7 +54,7 @@
|
|
54
54
|
|
55
55
|
こうすると山田太郎と山田花子の名前を取れますが、
|
56
56
|
|
57
|
-
あとの年齢、
|
57
|
+
あとの年齢、都道府県を名前と紐付けた形で取得できません。
|
58
58
|
|
59
59
|
|
60
60
|
|