如何在带有子标记的标记中选择多个带有Scrapy的文本部分



我有这个示例html:

<div class="classname1">
"This is text inside of" 
<b>"a subtag"</b>
"I would like to select."
<br>
"More text I don't need"
</br>

(more br and b tags on the same level)
</div>

结果应该是一个包含以下内容的列表:

["This is text inside of a subtag I would like to select."]  

我试过了:

response.xpath('//div[@class="classname1"]//text()[1]').getall()

但这只给了我第一部分";这是里面的文字;。

有两个挑战:

  1. 有时没有b标签
  2. 在需要解释的部分后面还有更多的文本

也许是循环?如果有人有办法,那将是非常有帮助的。

这是怎么回事(使用More text I don't need作为停止语(:

parts = []
for text in response.xpath('//div[@class="classname1"]//text()').getall():
if 'More text I don't need' in text:
break
parts.append(text)
result = ' '.join(parts)

UPDATE例如,您需要提取Ort::之前的所有文本

def parse(self, response):
for card_node in response.xpath('//div[@class="col-md-8 col-sm-12 card-place-container"]'):
parts = []
for text in card_node.xpath('.//text()').getall():
if 'Ort: ' in text:
break
parts.append(text)
before_ort = 'n'.join(parts)
print(before_ort)

将子代或self-xpath选择器与位置选择器结合使用,如下所示

response.xpath('//div[@class="classname1"]/descendant-or-self::*/text()[position() <3]').getall()

最新更新