2013-12-20 44 views
1

我想页面上选择一个项目:奇怪的XPath结果壳

sel.xpath('//div[@class="price-box"]/span[@class="regular-price"]/span[@class="price"]/text()').extract() 

HTML源代码我在寻找:使用XPath的变化,如

http://www.betterware.co.uk/catalog/product/view/id/4530/category/342/

at是:

<div class="price-box"> 
    <span class="regular-price" id="product-price-4530"> 
     <span class="price">£12.99</span> 
    </span> 
</div> 

而不是得到正确的[u'£12.99'],我收到了一些甚至没有出现在页面源代码中的数字。 Scrapy外壳给人:

[u'\xa312.99', 
u'\xa38.99', 
u'\xa38.99', 
u'\xa34.49', 
u'\xa34.49', 
u'\xa329.99', 
u'\xa329.99'] 

我已经没有任何麻烦,以这种方式选择其他项目,但是这和我所有的其他价格字段的痛苦为代价的文本这些神秘的效果。有人能为我在这里摆些灯吗?我的Python代码的项目选择是:

def parse_again(self, response): 
    sel = Selector(response) 
    meta = sel.xpath('//div[@class="product-main-info"]') 
    items = [] 
    for m in meta: 
     item = BetterItem() 
     item['link'] = response.url 
     item['item_name'] = m.select('//div[@class="product-name"]/h1/text()').extract() 
     item['sku'] = m.select('//p[@class="product-ids"]/text()').extract() 
     item['price'] = m.select('//div[@class="price-box"]/span/span/text()').extract() 
     items.append(item) 
    return items 

回答

1

Scrapy返回的结果没有任何问题。 u'\xa3'是井号:

In [99]: import unicodedata as UD 

In [100]: UD.name(u'\xa3') 
Out[100]: 'POUND SIGN' 

In [101]: print(u'\xa3') 
£ 

u'\xa312.99'是英镑符号u'\xa3随后由Unicode u'12.99'

如果要剥离从列表中井号,你可以这样做:

In [108]: data = [u'\xa312.99', 
u'\xa38.99', 
u'\xa38.99', 
u'\xa34.49', 
u'\xa34.49', 
u'\xa329.99', 
u'\xa329.99'] 

In [110]: [float(item.lstrip(u'\xa3')) for item in data] 
Out[110]: [12.99, 8.99, 8.99, 4.49, 4.49, 29.99, 29.99] 

下面的文章是“必须读”的人处理的Unicode:

和特别是用于Pyth在中心的观点:

+0

感谢unutbu,我会阅读 – Chrisinpants