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

回答編集履歴

1

テキスト修正

2018/09/19 23:20

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -46,4 +46,44 @@
46
46
  $
47
47
 
48
48
 
49
- 以上参考になれば幸いです。
49
+ 以上参考になれば幸いです。
50
+
51
+
52
+ ---
53
+
54
+ **追記**
55
+
56
+ 蛇足ですが、[lxml](https://lxml.de/) のHTMLパーサー [lxml.html](https://lxml.de/lxmlhtml.html)を使うと、XPath でテキストノードを持ってこれるので、以下のように手短に書けます。
57
+
58
+ ```python
59
+ import lxml.html
60
+
61
+ src = '''
62
+ <!DOCTYPE html>
63
+ <html>
64
+ <head>
65
+ <meta charset="utf-8">
66
+ <title>太字テスト</title>
67
+ <link rel="stylesheet" href="stylesheet.css">
68
+ </head>
69
+ <body>
70
+ <div class="normal">これは普通の文章です。</div>
71
+ <div class="ep">この文章は強調の文章です!</div>
72
+   <div class="normal">これは<span class="ep2">この部分が!</span>強調の文章です。</div>
73
+ </body>
74
+ </html>
75
+ '''
76
+
77
+
78
+ root = lxml.html.fromstring(src)
79
+
80
+ for text in root.xpath('//text()'):
81
+ if '!' in text:
82
+ elm = text.getparent()
83
+ print(elm.tag + "/" + str(elm.attrib) + "/" + text)
84
+ ```
85
+
86
+ 上記を実行すると以下が表示されます。
87
+
88
+ > div/{'class': 'ep'}/この文章は強調の文章です!
89
+ span/{'class': 'ep2'}/この部分が!