'Open Box Price: $1079.99'
<div class="prod-price">
<p class="opbox-price">
<strong> Open Box Price:<br>$1079.99</strong>
</p>
<p class="orig-price">
Regular Price: <strong>$1499.98</strong>
</p>
</div>
但我不能。文字在<br>
处停止。这是我的代码
doc = lxml.html.fromstring(r.content)
elements = doc.xpath(item_xpath)
print elements[1].find('div[3]/p[1]/text()[normalize-space()]')
答案 0 :(得分:4)
您想要的XPath的基础是使用descendant-or-self
- 根据需要调整结果:
>>> doc.xpath('//p[1]/descendant-or-self::text()')
['\n ', ' Open Box Price:', '$1079.99', '\n ']
>>> doc.xpath('//p[2]/descendant-or-self::text()')
['\n Regular Price: ', '$1499.98', '\n ']
或者当您使用lxml.html
时,您可以使用text_content()
paras = doc.xpath('//p'): # or findall etc...
for para in paras:
print para.text_content()
答案 1 :(得分:1)
只需使用,假设初始上下文(当前节点)是div
的父级:
normalize-space(div/p[1]/strong)
基于XSLT的验证:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
"<xsl:value-of select="normalize-space(div/p[1]/strong)"/>"
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下XML文档(提供的文档已更正为格式良好,然后包含在顶部html
元素中):
<html>
<div class="prod-price">
<p class="opbox-price">
<strong> Open Box Price:<br />$1079.99</strong>
</p>
<p class="orig-price">
Regular Price:
<strong>$1499.98</strong>
</p>
</div>
</html>
XPath表达式从顶部元素(html
)开始计算,评估结果被复制(用引号括起)到输出:
"Open Box Price:$1079.99"