我有这个示例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()
但这只给了我第一部分";这是里面的文字;。
有两个挑战:
- 有时没有b标签
- 在需要解释的部分后面还有更多的文本
也许是循环?如果有人有办法,那将是非常有帮助的。
这是怎么回事(使用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()