csv是一种字符串文件的格式,组织结构是:字符串之间加分隔符——行与行之间加换行符,同列之间加逗号分隔。
分隔符使得数据的组织方式更有规律,这更容易对数据进行查找和提取。
操作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¬ice=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中的数据读取出来。
import csv
file = open('music.csv',encoding='utf-8') # 打开文件
reader = csv.reader(file) # 读取内容
for item in reader:
print(item) # 输出内容
一个Excel文档又叫一个工作簿(workbook),每个工作簿中有若干个工作表(wordsheet),当前打开的工作表又叫活动表。
工作表中有行、列,特定的行与列相交的方格称为单元格(cell),如A列与第1行相交的单元格就叫A1,其他的同理有A2,A3,B1,B2……
对于excel的操作需要用到openpyxl模块,因此得先安装,这里就不做赘述
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¬ice=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,打开可看到
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文件本身的功能更为强大,比如嵌入图像和图表,生成公式等。选存储数据时就根据具体的使用场景来选择。