Получить <img>атрибут title с lxml в Python - PullRequest
0 голосов
/ 08 июля 2011

Я хочу извлечь onel-iner-тексты с этого сайта, используя Python.Сообщения в 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, так что в этом примере foobarbaz :necta:.Кажется, мне нужен анализатор DOM lxml для этого, однако я понятия не имею, как.Кто-нибудь может дать мне подсказку?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 08 июля 2011

попробуйте

  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")
0 голосов
/ 09 июля 2011

Использовать :

//div[@class='olh_message']/p/node()

Он выбирает все дочерние узлы (элементы, текстовые узлы, PI и комментарии-узлы) любого элемента p, который является дочерним для любого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:"/>
...