【问题标题】:How to extract only one element per tag with scrapy?如何使用scrapy仅提取每个标签的一个元素?
【发布时间】:2019-05-07 06:23:16
【问题描述】:

我正在尝试使用 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 返回:

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

现在重要的是,我要么只得到第一个元素“Edelstahl”,要么同时得到“Edelstahl gebürstet (silberfarben)”,但无论如何不能从一个 dd 标签中得到两个元素。如何实现?

【问题讨论】:

    标签: scrapy lxml parsel


    【解决方案1】:

    你可以使用:

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

    【讨论】:

      【解决方案2】:

      由于您的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 元素的明文。

      【讨论】:

      • 行得通,谢谢。但是,似乎还有另一个类似的问题。在某些情况下,它看起来像这样:
        txt
        然后被删除。我还需要这个“txt”作为输出。或者至少返回一个空元素。我将它作为键与
        作为值一起拉到键:值存储中,然后计数是错误的,因为这个被忽略了。
      • 很奇怪。在控制台中签入:&gt;&gt;&gt; from w3lib.html import remove_tags &gt;&gt;&gt; txt = '&lt;dd&gt;&lt;a href=".."&gt;txt&lt;/a&gt;&lt;/dd&gt;' &gt;&gt;&gt; remove_tags(txt) 给出txt。仔细检查你的逻辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2015-11-09
      • 2017-09-24
      • 1970-01-01
      相关资源
      最近更新 更多