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

回答編集履歴

1

追記

2020/08/06 08:35

投稿

quickquip
quickquip

スコア11314

answer CHANGED
@@ -6,4 +6,44 @@
6
6
  i = soup.find('i')
7
7
 
8
8
  star = float(i['class'][0][5:].replace('_', '.')) # => 4.0
9
+ ```
10
+
11
+ ----
12
+ (追記)
13
+ [子結合子](https://developer.mozilla.org/ja/docs/Web/CSS/Child_combinator)で探索して、↑で抽出してはどうでしょうか。
14
+
15
+ ```python
16
+ from bs4 import BeautifulSoup
17
+
18
+ # 質問とはちょっと違います
19
+ html = """
20
+ <main>
21
+ <li class="review">
22
+ <p class="hyoka">
23
+ <i class="star_4_0">評価</i>
24
+ </p>
25
+ </li>
26
+ <li class="review">
27
+ <p class="hyoka">
28
+ <i class="star_3_0">評価</i>
29
+ </p>
30
+ </li>
31
+ <li class="review">
32
+ <p class="hyoka">
33
+ <i class="star_2_0">評価</i>
34
+ </p>
35
+ </li>
36
+ </main>"""
37
+
38
+ soup = BeautifulSoup(html, 'lxml')
39
+
40
+ for index, e in enumerate(soup.select('p.hyoka > i'), start=1):
41
+ print(float(e['class'][0][5:].replace('_', '.')))
42
+ ```
43
+
44
+ 結果
45
+ ```plain
46
+ 4.0
47
+ 3.0
48
+ 2.0
9
49
  ```