在Python中使用lxml获取<img/>的title属性

时间:2011-07-08 17:38:53

标签: python dom xpath html-parsing lxml

我想使用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解析器才能做到,但是我不知道怎么做。任何人都可以给我一个提示吗?

提前致谢!

2 个答案:

答案 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:"/>