三、以CSV或Excel存储爬取的数据


一、CSV

1、CSV(逗号分隔值)文件

csv是一种字符串文件的格式,组织结构是:字符串之间加分隔符——行与行之间加换行符,同列之间加逗号分隔。
分隔符使得数据的组织方式更有规律,这更容易对数据进行查找和提取。



2、 代码实现

操作csv文件需要借助csv模块,这里就直接给代码了。爬虫代码点击这里查看

# 导入库
import requests
import csv	

# 请求地址
url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=60573890944916186&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=1&p=1&n=30&w=%E5%BC%A0%E5%AD%A6%E5%8F%8B&g_tk_new_20200303=247151551&g_tk=247151551&loginUin=1578887414&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0'

headers={'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}

# 获取数据
res_music = requests.get(url,headers=headers)

# 将response对象转换为dict/list
json_music = res_music.json()

# 根据数据的结构,将dict数据”一层层剥开“
list_music = json_music['data']['song']['list']

music_info = []
# 提取每首歌的信息
for music in list_music:
    music_name = music['name']              # 歌曲名
    album_name = music['album']['name']     # 专辑名
    singer = music['singer'][0]['name']     # 歌手
    length = music['interval']              # 时长
    music_url = 'https://y.qq.com/n/yqq/song/'\
                + music['mid'] + '.html'    # 播放链接
    music_info.append([music_name,album_name,singer,length,music_url])


file = open('music.csv','w',newline='',encoding='utf-8')  # newline=''可以删掉行与行之间的空格
csv4_write = csv.writer(file)
csv4_write.writerows(music_info)        # 多行写入
file.close()                            # 关闭流

运行后目录下出现一个music的文件,接下来我们将csv中的数据读取出来。


3、读取csv

import csv

file = open('music.csv',encoding='utf-8')  # 打开文件

reader = csv.reader(file)                       # 读取内容

for item in reader:
    print(item)                                 # 输出内容

运行:
在这里插入图片描述



二、Excel文件读写

1、Excel文件读写的情况较复杂

一个Excel文档又叫一个工作簿(workbook),每个工作簿中有若干个工作表(wordsheet),当前打开的工作表又叫活动表。
工作表中有行、列,特定的行与列相交的方格称为单元格(cell),如A列与第1行相交的单元格就叫A1,其他的同理有A2,A3,B1,B2……
对于excel的操作需要用到openpyxl模块,因此得先安装,这里就不做赘述


2、代码实现

import openpyxl

import requests

# 请求地址
url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=60573890944916186&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=1&p=1&n=30&w=%E5%BC%A0%E5%AD%A6%E5%8F%8B&g_tk_new_20200303=247151551&g_tk=247151551&loginUin=1578887414&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0'

headers={'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}

# 获取数据
res_music = requests.get(url,headers=headers)

# 将response对象转换为dict/list
json_music = res_music.json()

# 根据数据的结构,将dict数据”一层层剥开“
list_music = json_music['data']['song']['list']

music_info = []
# 提取每首歌的信息
for music in list_music:
    music_name = music['name']  # 歌曲名
    album_name = music['album']['name']  # 专辑名
    singer = music['singer'][0]['name']  # 歌手
    length = music['interval']  # 时长
    music_url = 'https://y.qq.com/n/yqq/song/' \
                + music['mid'] + '.html'  # 播放链接
    music_info.append([music_name, album_name, singer, length, music_url])

# 创建工作簿
workbook = openpyxl.Workbook()

# 获取工作簿的活动表
sheet1 = workbook.active

# 使用title属性给工作表命名,此时工作表名由默认的sheet1改为spider_excel
sheet1.title = 'spider_excel'

# 将爬取信息按行写入工作表
for music in music_info:
    sheet1.append(music)

# 保存
workbook.save('music_excel.xlsx')

# 关闭Excel
workbook.close()

运行后目录下出现一个文件music_excel.xlsx,打开可看到
在这里插入图片描述

3、读取excel文件

import openpyxl

# 打开工作簿
workbook = openpyxl.load_workbook('music_excel.xlsx')

# 读取指定工作表
sheet = workbook['spider_excel']

# 读取数据
for i in range(1, sheet.max_row+1):
    list = []                   # 用一个列表装每一行的数据
    for j in sheet[i]:
        list.append(j.value)    # 获取一行的每个单元格的值
    print(list)

运行结果:
在这里插入图片描述

总结

用CSV格式存储数据,读写比较方便,易于实现,文件也会比Excel文件小。Excel文件本身的功能更为强大,比如嵌入图像和图表,生成公式等。选存储数据时就根据具体的使用场景来选择。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值