使用 xpath text() 函数从子 elements/node 中提取所有文本
Extract all Text from child elements/node using xpath text() function
我正在使用 scrapy 并希望获取 Child Node 的所有文本。我在 scrapy 命令下获取文本
response.xpath('//div[@class="A"]/text()').get()
我期待结果:“1 -120u”
<div class="A">
<span id="B" class="C">
<span>1 </span>-110o</span>
<span id="B">
<span>1 </span>
-120u</span>
</div>
我还尝试了以下我在 stackoverlow 上发现的东西
response.xpath('//div[@class="A"]/text()').getall()
response.xpath('//div[@class="A"]/text()').extract()
response.xpath('//div[@class="A"]//text()').get()
response.xpath('//div[@class="A"]//text()').getall()
response.xpath('//div[@class="A"]/text()').extract()
这应该适用于 select div.A 中的所有文本:
response.xpath('//div[@class="A"]//text()').getall()
并过滤掉白色-space 字符串:
response.xpath('//div[@class="A"]//text()[normalize-space()]').getall()
如果您希望输出“1 -120u”,那么您可以:
substrings = response.css('span #B :not(.C)').xpath('.//text()[normalize-space()]').getall()
''.join(substrings)
这使用一个 css selector 到 select span id 为 B 但不是 class C,然后链接一个 xpath selector获取此范围内的所有非白色 space 文本。这将 return 一个子字符串列表,您将它们连接在一起 return 单个字符串,例如“1 -120u”
补充说明:
您尝试 select 的文本不是 div 的直接子元素 - 它在 span 元素的层内。
div/text() select 是 div
的直接子文本
div//text() selects 所有文本都是 div
的后代
.get() 用于 select 一个结果 - 如果您的 select 或产生结果列表,此方法将 return 中的第一项该列表
.getall() 将 return 当您 select 或选择多个结果时的结果列表,就像您的情况
我正在使用 scrapy 并希望获取 Child Node 的所有文本。我在 scrapy 命令下获取文本
response.xpath('//div[@class="A"]/text()').get()
我期待结果:“1 -120u”
<div class="A">
<span id="B" class="C">
<span>1 </span>-110o</span>
<span id="B">
<span>1 </span>
-120u</span>
</div>
我还尝试了以下我在 stackoverlow 上发现的东西
response.xpath('//div[@class="A"]/text()').getall()
response.xpath('//div[@class="A"]/text()').extract()
response.xpath('//div[@class="A"]//text()').get()
response.xpath('//div[@class="A"]//text()').getall()
response.xpath('//div[@class="A"]/text()').extract()
这应该适用于 select div.A 中的所有文本:
response.xpath('//div[@class="A"]//text()').getall()
并过滤掉白色-space 字符串:
response.xpath('//div[@class="A"]//text()[normalize-space()]').getall()
如果您希望输出“1 -120u”,那么您可以:
substrings = response.css('span #B :not(.C)').xpath('.//text()[normalize-space()]').getall()
''.join(substrings)
这使用一个 css selector 到 select span id 为 B 但不是 class C,然后链接一个 xpath selector获取此范围内的所有非白色 space 文本。这将 return 一个子字符串列表,您将它们连接在一起 return 单个字符串,例如“1 -120u”
补充说明:
您尝试 select 的文本不是 div 的直接子元素 - 它在 span 元素的层内。
div/text() select 是 div
的直接子文本div//text() selects 所有文本都是 div
的后代.get() 用于 select 一个结果 - 如果您的 select 或产生结果列表,此方法将 return 中的第一项该列表
.getall() 将 return 当您 select 或选择多个结果时的结果列表,就像您的情况