だから私はこのようなhtmlを持っています:
...
<ul class="myclass">
<li>blah</li>
<li>blah2</li>
</ul>
...
クラス名「myclass」のulからテキスト「blah」と「blah2」を取得したい
ということで、innerhtml()を使ってみたのですが、なぜかlxmlでは動きません。
私はPython 3を使用しています。
だから私はこのようなhtmlを持っています:
...
<ul class="myclass">
<li>blah</li>
<li>blah2</li>
</ul>
...
クラス名「myclass」のulからテキスト「blah」と「blah2」を取得したい
ということで、innerhtml()を使ってみたのですが、なぜかlxmlでは動きません。
私はPython 3を使用しています。
私は試してみます:
doc.xpath('.//ul[@class = "myclass"]/li/text()')
# out: ["blah","blah2"]
編集:
what if there was a <a> in the <li>? for example, how would I get "link" and text" from <li><a href="link">text</a></li>?
link = doc.xpath('.//ul[@class = "myclass"]/li/a/@href')
txt= doc.xpath('.//ul[@class = "myclass"]/li/a/text()')
必要に応じてそれらを組み合わせることができます。@larsmans の例を使用'//'
すると、テキスト全体を取得するために使用できます。これは、lxmlstring()
が式のメソッドをサポートしていないと私が信じているためです。
doc.xpath('.//ul[@class="myclass"]/li[a]//text() | .//ul[@class="myclass"]/li/a/@href')
# out: ['I contain a ', 'http://example.com', 'link', '.']
text_content()
また、次の方法も使用できます。
html=\
"""
<html>
<ul class="myclass">
<li>I contain a <a href="http://example.com">link</a>.</li>
<li>blah</li>
<li>blah2</li>
</ul>
</html>
"""
import lxml.html as lh
doc=lh.fromstring(html)
for elem in doc.xpath('.//ul[@class="myclass"]/li'):
print elem.text_content()
プリント:
#I contain a link.
#blah
#blah2