回答編集履歴
1
コメントに対しての回答
test
CHANGED
@@ -55,3 +55,41 @@
|
|
55
55
|
# 文<も>字<じ>ごとにルビを振<ふ>るサンプルです。
|
56
56
|
|
57
57
|
```
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
以下、コメントに対して
|
62
|
+
|
63
|
+
・下記のようにするとわかりますが、stringは子要素の文字列が1つだけなら拾えますが、複数あるとNoneを返すようです。
|
64
|
+
|
65
|
+
参考:[Beautifulsoup4のtextとstringの違い](https://irukanobox.blogspot.com/2016/06/beautifulsoup4textstring.html?m=0)
|
66
|
+
|
67
|
+
```python3
|
68
|
+
|
69
|
+
for tag in s.find_all():
|
70
|
+
|
71
|
+
print(tag)
|
72
|
+
|
73
|
+
print("string: ",tag.string)
|
74
|
+
|
75
|
+
print("text: ",tag.text)
|
76
|
+
|
77
|
+
```
|
78
|
+
|
79
|
+
で、for tag in s.find_all():という指定だと<p><ruby>漢<rt>かん</rt>字<rt>じ</rt></ruby></p>などは、<p>の中にrubyとかrtとか複数の子要素があるのでNoneを返してしまいます。
|
80
|
+
|
81
|
+
で、x='<' + tag.string + '>'が文字列+None+文字列となって、まず失敗します。
|
82
|
+
|
83
|
+
次に、置き換えの際にもtag.textが複数の文字列の集合体なので、置換に失敗するようです。
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
・元コードではrtタグに指定するためかif tag.find_all('rt'):が使われていますが、これだと「tagの内部にrtタグを含むか」という条件になってしまい、htmlとかbodyの大枠でもTrueになります。
|
88
|
+
|
89
|
+
あえてやるならば、if tag.name == "rt":です。
|
90
|
+
|
91
|
+
ただ、わざわざifでやらなくてもfor tag in s.find_all("rt"):という指定でrtタグだけ回してあげれば、スムーズに行くようです。
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
あとオマケで、i=0は使ってないので不要なのと、a=tag.text.replace(tag.string,x)はaという置換後の文字列を代入した変数が増えただけで、元のtagを置き換えてはいないので効果がありません。
|