【问题标题】:Scrapy extracting text from divScrapy从div中提取文本
【发布时间】:2017-02-10 16:50:53
【问题描述】:

我正在使用 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。更令人担忧的是,如果我只打印日期,它会打印 3 次相同的数据。我期待三个不同的数据,因为 html 中有三个独立的数据。

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

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

【问题讨论】:

    标签: xpath scrapy


    【解决方案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
    

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

    【讨论】:

    • 感谢它的工作。现在唯一的小问题是 &lt;strong&gt;Fri. 10 Feb&lt;/strong&gt; &lt;br /&gt;0:00 AM 只会提取 0:00AM 而不是强标签中的位。
    • 我仍然没有得到强标签中的位。一旦它完全起作用,我当然会接受答案。
    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多