我在一个文档里有一系列的<p>元素,我正在用scrapy进行筛选。其中一些是:<p><span>bla bla bla</span></p>或<p><span><span>bla bla bla</span><span>second bla bla</span></span></p>我想提取所有包含子对象的文本(假设我已经有了<p的选择器)(第二个例子:字符串为bla bla bla second bla bla)
<p>
<p><span>bla bla bla</span></p>
<p><span><span>bla bla bla</span><span>second bla bla</span></span></p>
<p
bla bla bla second bla bla
t9eec4r01#
您可以使用//text()从子节点中提取所有文本例如:
//text()
.//p//text()
y53ybaqx2#
这里有2个选项,根据情况,任何一个都可以有自己的好处。
html示例
<p>Something outside the span<span> and something inside the span</span></p>
选项01:使用//text()-〉返回列表
response.xpath('//p//text()').getall() # returns >>> ['Something outside the span', ' and something inside the span']
选项02:使用string()-〉返回字符串
string()
response.xpath('string(//p)').get() # returns >>> 'Something outside the span and something inside the span'
tp5buhyn3#
如果您更喜欢使用css选择器,则
response.css('p ::text').getall()
在元素选择器和::text之间放置空格将获取整个子树的内容,但您可能必须根据需要从那里解析/连接它。
::text
3条答案
按热度按时间t9eec4r01#
您可以使用
//text()
从子节点中提取所有文本例如:
y53ybaqx2#
这里有2个选项,根据情况,任何一个都可以有自己的好处。
html示例
选项01:使用
//text()
-〉返回列表选项02:使用
string()
-〉返回字符串tp5buhyn3#
如果您更喜欢使用css选择器,则
在元素选择器和
::text
之间放置空格将获取整个子树的内容,但您可能必须根据需要从那里解析/连接它。