scrapy 包括儿童在内的全部文字

6ie5vjzr  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(142)

我在一个文档里有一系列的<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

t9eec4r0

t9eec4r01#

您可以使用//text()从子节点中提取所有文本
例如:

.//p//text()
y53ybaqx

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()-〉返回字符串

response.xpath('string(//p)').get()

# returns

>>> 'Something outside the span and something inside the span'
tp5buhyn

tp5buhyn3#

如果您更喜欢使用css选择器,则

response.css('p ::text').getall()

在元素选择器和::text之间放置空格将获取整个子树的内容,但您可能必须根据需要从那里解析/连接它。

相关问题