teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2019/06/23 13:51

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -39,4 +39,28 @@
39
39
  「望む結果を具体的に正確に示す」ようにしましょう。質問を編集し「こういうHTMLの場合、こういう結果を得たい」というように具体的に例示すること、および自分が上に挙げた(2),(3)の違いのように「得たい出力の仕様が相手に確実に伝わるような例を提示する」ことに留意してください。
40
40
 
41
41
  多分そういうことを的確に説明するには「仕様を論理的に整理すること」が必要になります。またそれができれば質問前にご自分で戦略・戦術をもう少し先まで考えることもできましょう。
42
- 自分は「質問者さんの課題」が仕様の明確化が不十分なままコードを書き始めている点に思えるのです。
42
+ 自分は「質問者さんの課題」が仕様の明確化が不十分なままコードを書き始めている点に思えるのです。
43
+
44
+ ---
45
+ 追記:質問編集を受けて。
46
+
47
+ なるほど。期待する仕様が大分わかるようになりましたが・・・自分が思うにHTMLが例示しておられる構造だとすると戦術に難ありだと思います。それは
48
+
49
+ aタグとpタグのそれぞれに対して別々にfind_allしてしまうとaとpの対応関係がわかりません。特定のaタグの次にpタグが挟まれているかどうかがわからないので例えば「健康運上昇」に対するpタグが存在しないことがわからないはずです。こうしたタグのペア関係は大抵の場合
50
+
51
+ ```html
52
+ <h3>
53
+ <div><a>...</a><p>...</p></div>
54
+ <div><a>...</a><p>...</p></div>
55
+ ...
56
+ </h3>
57
+ ```
58
+ のようにaとpをグループ化するような上位のタグ(上の例ではdiv)があったりすると思うのですが・・・もしそれがあるならaやpをfind_allで探すのではなくdivをfind_allで列挙し、各々のdivの子供要素からa, pを探すべきだと思います。
59
+ ```python
60
+ for h3 in html.find_all("h3"):
61
+ for div in h3.find_all("div"):
62
+ a = div.find("a")
63
+ p = div.find("p")
64
+ ...
65
+ ```
66
+ もしご質問にあるようにh3タグの直下にaとpが無秩序に並ぶ構造ならfind_all("a")やfind_all("p")ではなく、h3タグの子要素を一つづつ列挙してその要素がaなのかpなのか(あるいはそれ以外なのか)といった論理を組まなければならないと思います。