前言
做数据爬取快一年了,第一次遇到这样的数据(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()
以上操作就可以很顺利提取想要的数据啦