Scrapy从div中提取文本

时间:2017-02-10 16:50:54

标签: xpath scrapy

我正在使用Scrapy构建一个简单的刮刀,但是在提取数据的某些部分时遇到了问题。该网站包含以下约20个代码块:

 <div class="row result">
    <div class="updateCont date col-md-2 col-sm-2 col-xs-3">
         <span>    
            <strong>Fri. 10 Feb</strong> <br />0:00 AM
         </span>
    </div>
    <div class="updateCont eventIcon col-md-1 col-sm-1 col-xs-3">
        <div class="icon ">
            <i class="fa fa-update"></i>
        </div>
    </div>
    <div class="updateCont event col-md-9 col-sm-8 col-xs-6">
        <span> 
              The buyer has been notified of this update. <br />
              <span class="inner department">
                  124
              </span>
        </span>
    </div>
</div>

我设法用以下方法提取每一个:

sel = Selector(text=response.body)
updates =  sel.xpath("//div[@class='row result']")

我现在想隔离日期并将其转换为datetime对象以及updateCont事件字符串。 此次更新已通知购买

我试过了:

for update in updates:
        date = update.xpath('//span').extract()
        print ( len(date) )

导致7.我期待它为3.更令人担忧的是,如果我打印出日期,它会打印出相同的数据三次。我期待三种不同的数据,因为html中有三种不同的数据。

sel = Selector(text=response.body)
updates =  sel.xpath("//div[@class='row result']")

隔离这些部分的正确代码?什么是提取跨度的最佳方法?

1 个答案:

答案 0 :(得分:-1)

In [19]: for update in updates:
    ...:         spans = update.xpath('//span')
    ...:         for span in spans:
    ...:             text = span.xpath('normalize-space()').extract_first()
    ...:             print(text)
    ...:             
    ...:    

出:

Fri. 10 Feb 0:00 AM
The buyer has been notified of this update. 124
124

使用.将其隔离到当前节点