刮削时提取数字



我试图从公寓列表网站上抓取som数据。

我想用这个价格来计算。所以我需要把它存储为数字。但网站上的文字是这样写的:5 670元/月

我想删除所有的字符和空格,然后使其成为一个整数保存在我的数据库中。

我尝试了正则表达式,但是得到了这个错误。

TypeError:预期字符串或字节,如对象

这是我收集价格的一个元素。

<p class="info-price">399&nbsp;euro&nbsp;per&nbsp;month</p>

我得到了像这个这样的xpath的价格

p=response.xpath('//p[@class="info-price"]/text(('(.textract((

当我收集对象名称和价格时,输出会像这个

{'object': ['North West End 24'], 'price': ['399xa0euroxa0perxa0month']}

我应该如何以及何时转换?

所以我找到了一个解决方案。也许这是一个肮脏的解决方案,有人带来了优雅的一句话。

但据我所知,我用这行刮来的文本

p = response.xpath('//p[@class="info-price"]/text()').extract()

是一个列表对象。

所以我添加了一行代码将其"转换"为字符串

p = ''.join(map(str, p))    #Convert to string from list object

最后删除所有的空格和文本,所以我最终只得到了数字的价格,我使用这个代码

p = re.sub('D', '', p)     #Remove all but numbers

因此,总而言之,这个片段将价格的文本转换为字符串,然后删除除牛以外的所有牛。

p = response.xpath('//p[@class="info-price"]/text()').extract()
p = ''.join(map(str, p))    #Convert to string from list object
p = re.sub('D', '', p)     #Remove all but numbers

.extract()方法所做的是查找xpath表达式的所有出现;这就是它返回列表的原因——可能有不止一个结果。如果您知道只有一个结果或只关心第一个结果,请改用.extract_first()-它将以字符串的形式返回第一个结果(如果找不到匹配项,则返回None(,因此您不必将列表转换为字符串。(请参见https://docs.scrapy.org/en/latest/topics/selectors.html#id1)

p = response.xpath('//p[@class="info-price"]/text()').extract_first()

最新更新