2016-01-29 115 views
0

與scrapy蜘蛛一起工作,它的價格拉錯了輸出。在Scrapy Xpath的逃脫美元符號

HTML:

<span style="" class="b-product_price-standard b-product_price-standard--line_through">$350</span> 

的Xpath:

['price'] = sel.xpath('normalize-space(div/main/div[4]/div[3]/div/div[1]/h1[2]/div/span[1]/text())').extract() 

結果:

'price': [u'\u20ac300] 

這似乎是 「$」 的價格是造成問題。我一直在挖,我似乎無法找到我認爲會是一個普遍問題的答案,這讓我想到它可能更多地是我缺少的。

任何幫助,非常感謝!

+0

結果是正確的(並且以歐元爲單位),它只是一種用unicode代碼點表示字符超出ascii範圍的方法。嘗試'打印(u'\ u20ac300')'。按照此鏈接:http://www.utf8-chartable.de/unicode-utf8-table.pl?start=8352&number=1024 –

+0

@CasimiretHippolyte謝謝!甚至沒有想到這一點。 –

回答

0

使用重新代替提取

['price'] = sel.xpath('.../span[1]/text())').re('\d+') 
0

卡西米爾等伊波利特是正確的,正確的結果被檢索到,但其在Python表示看起來不同。但除此之外,您的XPath表達式並不理想。

儘量不要依賴冗長的位置XPath表達式,當HTML文檔發生細微變化時,它們很容易中斷。

而是嘗試通過屬性查找元素。也許這種類屬性的組合是獨特的?例如

//span[@class = 'b-product_price-standard b-product_price-standard--line_through'] 

可以工作。如果沒有,則必須顯示更多您正在選擇的HTML文檔。