1

だから私はこのようなhtmlを持っています:

...
<ul class="myclass">
    <li>blah</li>
    <li>blah2</li>
</ul>
...

クラス名「myclass」のulからテキスト「blah」と「blah2」を取得したい

ということで、innerhtml()を使ってみたのですが、なぜかlxmlでは動きません。

私はPython 3を使用しています。

4

1 に答える 1

1

私は試してみます:

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
于 2013-01-11T23:44:40.100 に答える