我试图从公寓列表网站上抓取som数据。
我想用这个价格来计算。所以我需要把它存储为数字。但网站上的文字是这样写的:5 670元/月
我想删除所有的字符和空格,然后使其成为一个整数保存在我的数据库中。
我尝试了正则表达式,但是得到了这个错误。
TypeError:预期字符串或字节,如对象
这是我收集价格的一个元素。
<p class="info-price">399 euro per 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()