2011-11-10 160 views
0

我是xpath的新手,請耐心等待。目前,我正在尋找使用scrapy刮一些內容了一些網頁,內容看起來是這樣的:scrapy xpath幫助需要

 <td colspan="3" valign="top" class="regular">Landsize: 84,000sq with an extensive shoreline 750m<br /> 
<br /> 
Call Or Email for more info<br /> 

. Full-length Olympicpool,children pool,jacuzzi<br /> 
\' Landscapesdkey bridges<br /> 
. 2 tennis courts<br /> 
. water features True seafront development with iconic design by architect Daniel Libeskind<br /> 
lconic residential, located less than\' 150 metres from the shoreline<br /> 
<br /> 
opposite the future integrated resort on sentosa Island.<br /> 

A part of keppel Bay world calss water front precinct with luxury homes.<br /> 
<br /> 
Call or email for more info </td> 

具體來說,我用以下hxs.select('//tr[contains(td,"Description")]/following-sibling::tr[1]/td/text()').extract()

然而,這樣做會由於內容被<br>分隔,因此將結果項目分成列表。如果我從xpath中排除text(),則<td>元素將包含在所得字符串中,這是不可取的。

在xpath中有沒有一種方法可以確保我的結果字符串是上面顯示的但沒有td標籤的所有內容?我希望我不需要手動回加列表<br/>

回答

3

從您的評論來看,Evan的正確答案是,您想跳過NL

在這種情況下,嘗試:

normalize-space(//tr[contains(td,"Description")]/following-sibling::tr[1]/td) 

注意

  1. 如果參數normalize-space()選擇多個節點,此功能將只返回處理結果第一選定節點。

  2. 刪除所有前導和尾隨空格字符。所有相鄰空白字符的中間組被替換爲單個空格字符。

+0

其實我只是想留住
,但希望​​刪除。 – goh

+0

@iws:那麼你想要的是不可能實現評估一個XPath表達式 - XPath是一個* query *語言的XML - 因此它只是*選擇*節點集並且從不刪除或修改節點。使用XPath,您可以只獲取元素的字符串值(根本不包含後代節點),或者如果您想獲取其子節點,則這些元素中的元素將具有其所有子元素/子元素。 –

0

嘗試在調用string()時包裝表達式,它返回節點的字符串值,它是所有字符串值的串聯節點的後代文本節點。

string(//tr[contains(td,"Description")]/following-sibling::tr[1]/td) 
+0

試圖字符串(),但它轉變成
\ r \ n – goh