我有以下使用Scrapy解析的HTML:
<TD CLASS="dddefault">
<SPAN class="fieldlabeltext">Associated Term: </SPAN>Fall 2015 - Qatar
<BR>
<SPAN class="fieldlabeltext">Registration Dates: </SPAN>Apr 09, 2015 to Aug 27, 2015
<BR>
<SPAN class="fieldlabeltext">Levels: </SPAN>Graduate, Undergraduate
<BR>
</TD>
我希望获得第一个SPAN和BR之间的术语以及第二个SPAN和BR之间的日期。
我试过了:
term = response.xpath('//td[@class="dddefault"]/span[@class="fieldlabeltext"][1]/following-sibling::text()').extract()
date = response.xpath('//td[@class="dddefault"]/span[@class="fieldlabeltext"][2]/following-sibling::text()').extract()
但是这些也给了我下面所有内容的文字。
有什么方法可以在SPAN之后和BR之前获得文本吗?
谢谢。
答案 0 :(得分:4)
由于SPAN是当前的上下文节点,因此&#39> SPAN&#39; 之后的部分标准很容易实现,但&#39;在BR&#39; part可能不像您想象的那么容易,因为HTML示例中有多个有什么方法可以在SPAN之后和BR之前获得文本吗?
BR
元素(fe Graduate, Undergraduate
也会在BR
之前考虑,第3 BR
)。
因此,我建议采用不同的方法,使用XPath位置索引[1]
将结果限制为最近的后续兄弟文本节点,该节点将返回预期的文本节点,例如: / p>
//td[@class="dddefault"]/span[@class="fieldlabeltext"][1]/following-sibling::text()[1]
//td[@class="dddefault"]/span[@class="fieldlabeltext"][2]/following-sibling::text()[1]