【问题标题】:Strange XPath results in Scrapy shell奇怪的 XPath 导致 Scrapy shell
【发布时间】:2013-12-21 08:57:13
【问题描述】:

我正在尝试选择页面上的项目:

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

使用 XPath 的变体,例如:

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

我正在查看的 html 源代码是:

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

我没有得到正确的[u'£12.99'],而是得到了一堆甚至没有出现在页面源代码中的其他数字。 Scrapy shell 给出:

[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

【问题讨论】:

    标签: python xpath scrapy


    【解决方案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 的人的“必读”:

    特别是对于以 Python 为中心的观点:

    【讨论】:

      猜你喜欢
      • 2016-03-05
      • 2015-03-03
      • 1970-01-01
      • 2014-07-01
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多