如何使用Scrapy提取未被<div>包裹的HTML卧室数量数据
解决方案
问题原因
你的代码用::text.get()只会返回匹配到的第一个文本节点,而目标数字1是目标div下的第三个文本节点(前两个是SVG标签后的空白字符、"Chambres"文本),所以无法直接获取到数字。
可行方案
方案1:CSS选择器+文本过滤
先获取目标div下的所有文本节点,再过滤出有效数字文本:
# 获取目标div下的所有文本内容 text_nodes = house_listing.css('.search-results-listings-list__item-description__characteristics__item:contains("Chambres") ::text').getall() # 过滤掉空白和"Chambres",提取剩余的有效数字文本 bedrooms_info = next((t.strip() for t in text_nodes if t.strip() and t.strip() != "Chambres"), None) bedrooms = self.extract_number(bedrooms_info) if bedrooms_info else None
方案2:XPath直接定位目标文本节点
用XPath精准定位到"Chambres"所在div之后的最后一个文本节点:
# 定位到包含Chambres的父div,取其最后一个文本节点 bedrooms_info = house_listing.xpath('.//div[contains(@class, "search-results-listings-list__item-description__characteristics__item") and .//div[text()="Chambres"]]/text()[last()]').get() # 去除文本前后的空白字符 if bedrooms_info: bedrooms_info = bedrooms_info.strip() bedrooms = self.extract_number(bedrooms_info) if bedrooms_info else None
说明
你的extract_number方法逻辑正常,只要能获取到"1"这类纯数字文本,就能正确提取出整数1。
内容的提问来源于stack exchange,提问作者e3ham
相关产品推荐
相关产品推荐

