Python 3.x 刮削时提取数字
我试图从一个公寓列表网站上获取som数据 我想用价格来计算。所以我需要将其存储为数字。但网站上的文字是这样写的:5670美元/月 我想删除所有字符和空格,然后将其设置为整数保存在我的数据库中 我尝试了正则表达式,但得到了这个错误 TypeError:应为字符串或类似字节的对象 这是我收集价格的一个要素Python 3.x 刮削时提取数字,python-3.x,scrapy,re,Python 3.x,Scrapy,Re,我试图从一个公寓列表网站上获取som数据 我想用价格来计算。所以我需要将其存储为数字。但网站上的文字是这样写的:5670美元/月 我想删除所有字符和空格,然后将其设置为整数保存在我的数据库中 我尝试了正则表达式,但得到了这个错误 TypeError:应为字符串或类似字节的对象 这是我收集价格的一个要素 <p class="info-price">399 euro per month</p> 我应该
<p class="info-price">399 euro per month</p>
我应该如何以及何时转换它?因此我找到了一个解决方案。也许这是一个肮脏的解决方案,有人带着优雅的一句台词 但据我所知,我用这一行勉强拼凑了一下
p = response.xpath('//p[@class="info-price"]/text()').extract()
是一个列表对象
因此,我添加了一行代码将其“转换”为sa字符串
p = ''.join(map(str, p)) #Convert to string from list object
p = re.sub('\D', '', p) #Remove all but numbers
最后,删除所有空格和文本,所以我最终只得到了我使用的代码中数字的价格
p = ''.join(map(str, p)) #Convert to string from list object
p = re.sub('\D', '', p) #Remove all but numbers
总之,这个代码段获取price的文本,将其转换为字符串,然后删除除niumber以外的所有内容
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()
——它将以字符串形式返回第一个结果(如果没有找到匹配项,则返回无结果),因此您不必将列表转换为字符串。(见附件)
你能用一个例子分享这个网站的链接吗?它是几个网站,结果是一样的。我从价格和货币上得到了全文。我刮的时候是这样的。“3995韩元”或“249欧元/月”。当我想要它们“3995”和“249”的时候。看看这个,然后使用html解析器。@wuerfelfreak我不明白。但我还是设法解决了。谢谢你的回复!这只是意味着正则表达式很少是解析html的好选择。但我很高兴你让它工作了。祝您有个美好的一天!