2015-07-20 28 views
2

我有我使用Scrapy正在解析以下HTML之間的文本:Scrapy:獲取兩個標識符

<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之前獲取文本?

謝謝。

回答

3

有沒有什麼方法可以在SPAN之後和BR之前獲得文本?

「後SPAN」部分的標準是容易的,因爲跨距在當前上下文節點來實現,但「前BR」部分可能不會像你想象的,因爲有多個BR元素一樣簡單在您的HTML樣本中(fe Graduate, Undergraduate也將在BR之前考慮,第3個BR)。

所以,我建議一種不同的方法,通過使用XPath位置索引[1]限制結果到最近跟隨兄弟文本節點,這將返回預期的文本節點,例如:

//td[@class="dddefault"]/span[@class="fieldlabeltext"][1]/following-sibling::text()[1] 
//td[@class="dddefault"]/span[@class="fieldlabeltext"][2]/following-sibling::text()[1]