回答編集履歴
1
コメントに対しての回答
answer
CHANGED
@@ -26,4 +26,23 @@
|
|
26
26
|
|
27
27
|
# 漢<かん>字<じ>
|
28
28
|
# 文<も>字<じ>ごとにルビを振<ふ>るサンプルです。
|
29
|
-
```
|
29
|
+
```
|
30
|
+
|
31
|
+
以下、コメントに対して
|
32
|
+
・下記のようにするとわかりますが、stringは子要素の文字列が1つだけなら拾えますが、複数あるとNoneを返すようです。
|
33
|
+
参考:[Beautifulsoup4のtextとstringの違い](https://irukanobox.blogspot.com/2016/06/beautifulsoup4textstring.html?m=0)
|
34
|
+
```python3
|
35
|
+
for tag in s.find_all():
|
36
|
+
print(tag)
|
37
|
+
print("string: ",tag.string)
|
38
|
+
print("text: ",tag.text)
|
39
|
+
```
|
40
|
+
で、for tag in s.find_all():という指定だと<p><ruby>漢<rt>かん</rt>字<rt>じ</rt></ruby></p>などは、<p>の中にrubyとかrtとか複数の子要素があるのでNoneを返してしまいます。
|
41
|
+
で、x='<' + tag.string + '>'が文字列+None+文字列となって、まず失敗します。
|
42
|
+
次に、置き換えの際にもtag.textが複数の文字列の集合体なので、置換に失敗するようです。
|
43
|
+
|
44
|
+
・元コードではrtタグに指定するためかif tag.find_all('rt'):が使われていますが、これだと「tagの内部にrtタグを含むか」という条件になってしまい、htmlとかbodyの大枠でもTrueになります。
|
45
|
+
あえてやるならば、if tag.name == "rt":です。
|
46
|
+
ただ、わざわざifでやらなくてもfor tag in s.find_all("rt"):という指定でrtタグだけ回してあげれば、スムーズに行くようです。
|
47
|
+
|
48
|
+
あとオマケで、i=0は使ってないので不要なのと、a=tag.text.replace(tag.string,x)はaという置換後の文字列を代入した変数が増えただけで、元のtagを置き換えてはいないので効果がありません。
|