前言

做数据爬取快一年了,第一次遇到这样的数据(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()

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐