我想使用Python从this网站中提取onel-iner-text。 HTML中的消息如下所示:
<div class="olh_message">
<p>foobarbaz <img src="/static/emoticons/support-our-fruits.gif" title=":necta:" /></p>
</div>
到目前为止,我的代码看起来像这样:
import lxml.html
url = "http://www.scenemusic.net/demovibes/oneliner/"
xpath = "//div[@class='olh_message']/p"
tree = lxml.html.parse(url)
texts = tree.xpath(xpath)
texts = [text.text_content() for text in texts]
print(texts)
然而,现在,我只得到foobarbaz
,但是我想在其中获得img的title-argument,所以在这个示例foobarbaz :necta:
中。看来我需要lxml的DOM解析器才能做到,但是我不知道怎么做。任何人都可以给我一个提示吗?
提前致谢!
答案 0 :(得分:1)
试试这个
import lxml.html
url = "http://www.scenemusic.net/demovibes/oneliner/"
parser = lxml.etree.HTMLParser()
tree = lxml.etree.parse(url, parser)
texts = tree.xpath("//div[@class='olh_message']/p/img/@title")
答案 1 :(得分:0)
使用强>:
//div[@class='olh_message']/p/node()
他选择任何p
元素的所有子节点(元素,文本节点,PI和注释节点),该元素是任何div
元素的子元素,其class
属性为'olh_message'
。
使用XSLT作为XPath主机的验证:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select="//div[@class='olh_message']/p/node()"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下XML文档:
<div class="olh_message">
<p>foobarbaz
<img src="/static/emoticons/support-our-fruits.gif" title=":necta:" />
</p>
</div>
产生了想要的正确结果(表明XPath表达式已经选择了所需的节点):
foobarbaz
<img src="/static/emoticons/support-our-fruits.gif" title=":necta:"/>