CDATA 数据处理

前言

做数据爬取快一年了,第一次遇到这样的数据(CDATA),用xpath提取他父类节点,其内容包含了cdata数据,内容后就无法提起出来,整的我一脸懵逼,爬了这么多个网站第一次见这样的数据形式,然后跟同事讨论起这块新大陆,再然后........此处省略一段逗比见解。

进入正题

首先个人对CDATA的见解:

CDATA对解释器忽略了它包含的内容,所以在爬取数据节点提取的时候没有数据存在

对一段CDATA数据进行提取

例:

<recordset>
<record>
<![CDATA[
<li><span class="news-time">2020-01-31</span></a></li>
]]>
</record>
<record>
<![CDATA[
<li><span class="news-time">2020-01-31</span></a></li>
]]>
</record>
<record>

<li><span class="news-time">2020-01-17</span></a></li>
]]>
</recordset>

对如上数据进行处理

1.剔除<![CDATA[  和    ]]>   

2.帮处理后的数据转化为Selector的实例

3.运用xpath进行提取

import requests
import scrapy

resp = '
    <recordset>
    <record>
    <![CDATA[
    <li><span class="news-time">2020-01-31</span></a></li>
    ]]>
    </record>
    <record>
    <![CDATA[
    <li><span class="news-time">2020-01-31</span></a></li>
    ]]>
    </record>
    <record>
    
    <li><span class="news-time">2020-01-17</span></a></li>
    ]]>
    </recordset>
'

# 替换,就是这么暴力
text = resp.replace('<![CDATA[', '').replace(']]>', '')
# 创建一个 Selector 类的实例
sel = scrapy.Selector(text=text)
# 使用 xpath 选择器
year_list = sel.xpath('//li/span/text()').getall()

以上操作就可以很顺利提取想要的数据啦

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值