如何使用scrapy仅提取每个标记的一个元素?

如何使用scrapy仅提取每个标记的一个元素?,scrapy,lxml,parsel,Scrapy,Lxml,Parsel,我正在尝试使用srapy shell中的以下命令从页面标记中提取文本: [w.strip() for w in response.xpath('//ul[@class="attribute-list"]/li/dl/dd/text()').extract()] dd标记如下所示: <dd> Edelstahl <br>gebürstet (silberfarben) </dd> 现在重要的是,我要么只得到第一个元素“Edelstahl”,要么同时得到两个复

我正在尝试使用srapy shell中的以下命令从页面标记
中提取文本:

[w.strip() for w in response.xpath('//ul[@class="attribute-list"]/li/dl/dd/text()').extract()]
dd标记如下所示:

<dd> Edelstahl <br>gebürstet (silberfarben) </dd>

现在重要的是,我要么只得到第一个元素“Edelstahl”,要么同时得到两个复合元素“Edelstahl gebürstet(silberfarben)”,但在任何情况下都不能从一个dd标记中得到两个元素。如何实现这一点?

既然您的
dd
中有标记,最好使用以下内容:

from w3lib.html import remove_tags
print [remove_tags(w).strip() for w in response.xpath('//ul[@class="attribute-list"]/li/dl/dd').extract()]
它将为每个
dd
元素提供清晰的文本。

您可以使用:

[w.xpath('string()').extract_first().strip() for w in response.xpath('//ul[@class="attribute-list"]/li/dl/dd')]

那很有效,谢谢。然而,似乎还有另一个类似的问题。在某些情况下,它看起来像这样:然后被移除。我还需要这个“txt”作为输出。或者至少返回一个空元素。我把这个as键和as值一起拉到一个key:value存储中,然后计数就错了,因为这个被忽略了,这很奇怪。签入控制台:
>>>从w3lib.html导入删除标签>>>txt=''>>删除标签(txt)
给出
txt
。仔细检查你的逻辑。
[w.xpath('string()').extract_first().strip() for w in response.xpath('//ul[@class="attribute-list"]/li/dl/dd')]