回答編集履歴

1

テキスト修正

2018/09/19 23:20

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -95,3 +95,83 @@
95
95
 
96
96
 
97
97
  以上参考になれば幸いです。
98
+
99
+
100
+
101
+
102
+
103
+ ---
104
+
105
+
106
+
107
+ **追記**
108
+
109
+
110
+
111
+ 蛇足ですが、[lxml](https://lxml.de/) のHTMLパーサー [lxml.html](https://lxml.de/lxmlhtml.html)を使うと、XPath でテキストノードを持ってこれるので、以下のように手短に書けます。
112
+
113
+
114
+
115
+ ```python
116
+
117
+ import lxml.html
118
+
119
+
120
+
121
+ src = '''
122
+
123
+ <!DOCTYPE html>
124
+
125
+ <html>
126
+
127
+ <head>
128
+
129
+ <meta charset="utf-8">
130
+
131
+ <title>太字テスト</title>
132
+
133
+ <link rel="stylesheet" href="stylesheet.css">
134
+
135
+ </head>
136
+
137
+ <body>
138
+
139
+ <div class="normal">これは普通の文章です。</div>
140
+
141
+ <div class="ep">この文章は強調の文章です!</div>
142
+
143
+   <div class="normal">これは<span class="ep2">この部分が!</span>強調の文章です。</div>
144
+
145
+ </body>
146
+
147
+ </html>
148
+
149
+ '''
150
+
151
+
152
+
153
+
154
+
155
+ root = lxml.html.fromstring(src)
156
+
157
+
158
+
159
+ for text in root.xpath('//text()'):
160
+
161
+ if '!' in text:
162
+
163
+ elm = text.getparent()
164
+
165
+ print(elm.tag + "/" + str(elm.attrib) + "/" + text)
166
+
167
+ ```
168
+
169
+
170
+
171
+ 上記を実行すると以下が表示されます。
172
+
173
+
174
+
175
+ > div/{'class': 'ep'}/この文章は強調の文章です!
176
+
177
+ span/{'class': 'ep2'}/この部分が!