2016-01-29 69 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文档。