如何使用 scrapy 为每个标签只提取一个元素?

How to extract only one element per tag with scrapy?

我正在尝试使用 srapy shell:

中的此命令从页面标签 <dd></dd> 中提取文本
[w.strip() for w in response.xpath('//ul[@class="attribute-list"]/li/dl/dd/text()').extract()]

dd 标签如下所示:

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

scrapy returns:

'Edelstahl', 'gebürstet (silberfarben)', more dd elements...

现在,重要的是我要么只得到第一个元素 "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')]