回答編集履歴

1

追記

2019/06/23 13:51

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -81,3 +81,51 @@
81
81
  多分そういうことを的確に説明するには「仕様を論理的に整理すること」が必要になります。またそれができれば質問前にご自分で戦略・戦術をもう少し先まで考えることもできましょう。
82
82
 
83
83
  自分は「質問者さんの課題」が仕様の明確化が不十分なままコードを書き始めている点に思えるのです。
84
+
85
+
86
+
87
+ ---
88
+
89
+ 追記:質問編集を受けて。
90
+
91
+
92
+
93
+ なるほど。期待する仕様が大分わかるようになりましたが・・・自分が思うにHTMLが例示しておられる構造だとすると戦術に難ありだと思います。それは
94
+
95
+
96
+
97
+ aタグとpタグのそれぞれに対して別々にfind_allしてしまうとaとpの対応関係がわかりません。特定のaタグの次にpタグが挟まれているかどうかがわからないので例えば「健康運上昇」に対するpタグが存在しないことがわからないはずです。こうしたタグのペア関係は大抵の場合
98
+
99
+
100
+
101
+ ```html
102
+
103
+ <h3>
104
+
105
+ <div><a>...</a><p>...</p></div>
106
+
107
+ <div><a>...</a><p>...</p></div>
108
+
109
+ ...
110
+
111
+ </h3>
112
+
113
+ ```
114
+
115
+ のようにaとpをグループ化するような上位のタグ(上の例ではdiv)があったりすると思うのですが・・・もしそれがあるならaやpをfind_allで探すのではなくdivをfind_allで列挙し、各々のdivの子供要素からa, pを探すべきだと思います。
116
+
117
+ ```python
118
+
119
+ for h3 in html.find_all("h3"):
120
+
121
+ for div in h3.find_all("div"):
122
+
123
+ a = div.find("a")
124
+
125
+ p = div.find("p")
126
+
127
+ ...
128
+
129
+ ```
130
+
131
+ もしご質問にあるようにh3タグの直下にaとpが無秩序に並ぶ構造ならfind_all("a")やfind_all("p")ではなく、h3タグの子要素を一つづつ列挙してその要素がaなのかpなのか(あるいはそれ以外なのか)といった論理を組まなければならないと思います。