Scrapy:在两个标识符

时间:2015-07-20 13:06:47

标签: python xpath scrapy

我有以下使用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之前获得文本吗?

谢谢。

1 个答案:

答案 0 :(得分:4)

  

有什么方法可以在SPAN之后和BR之前获得文本吗?

由于SPAN是当前的上下文节点,因此&#39> SPAN&#39; 之后的部分标准很容易实现,但&#39;在BR&#39; part可能不像您想象的那么容易,因为HTML示例中有多个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]