经常使用的存储数据的方式有两种——存储成csv格式文件、存储成Excel文件(不是复制黏贴的那种)html
前面,我有讲到json是特殊的字符串。其实,csv也是一种字符串文件的格式,它组织数据的语法就是在字符串之间加分隔符——行与行之间是加换行符,同列之间是加逗号分隔。python
为何要加分隔符?由于不加的话,数据都堆在一块儿,会显得杂乱无章,也不方便咱们以后提取和查找。这也是一种让数据变得有规律的组织方式。json
它能够用任意的文本编辑器打开(如记事本),也能够用Excel打开,还能够经过Excel把文件另存为csv格式(由于Excel支持csv格式文件)。app
另外,用csv格式存储数据,读写比较方便,易于实现,文件也会比Excel文件小。但csv文件缺乏Excel文件自己的不少功能,好比不能嵌入图像和图表,不能生成公式。dom
import csv #引用csv模块。 csv_file = open('demo.csv','w',newline='',encoding='utf-8') #建立csv文件,咱们要先调用open()函数,传入参数:文件名“demo.csv”、写入模式“w”、newline=''、encoding='utf-8'。
加newline=' '参数的缘由是,能够避免csv文件出现两倍的行距(就是能避免表格的行与行之间出现空白行)。加encoding='utf-8',能够避免编码问题致使的报错或乱码。编辑器
建立完csv文件后,咱们要借助csv.writer()函数来创建一个writer对象。函数
import csv #引用csv模块。 csv_file = open('demo.csv','w',newline='',encoding='utf-8') #调用open()函数打开csv文件,传入参数:文件名“demo.csv”、写入模式“w”、newline=''、encoding='utf-8'。 writer = csv.writer(csv_file) # 用csv.writer()函数建立一个writer对象。
那怎么往csv文件里写入新的内容呢?答案是——调用writer对象的writerow()方法。编码
writer.writerow(['电影','豆瓣评分']) #借助writerow()函数能够在csv文件里写入一行文字 "电影"和“豆瓣评分”
提醒:writerow()函数里,须要放入列表参数,因此咱们得把要写入的内容写成列表。就像['电影','豆瓣评分']。url
import csv #引用csv模块。 csv_file = open('demo.csv','w',newline='',encoding='utf-8') #调用open()函数打开csv文件,传入参数:文件名“demo.csv”、写入模式“w”、newline=''、encoding='utf-8'。 writer = csv.writer(csv_file) # 用csv.writer()函数建立一个writer对象。 writer.writerow(['电影','豆瓣评分']) #调用writer对象的writerow()方法,能够在csv文件里写入一行文字 “电影”和“豆瓣评分”。 writer.writerow(['银河护卫队','8.0']) #在csv文件里写入一行文字 “银河护卫队”和“8.0”。 writer.writerow(['复仇者联盟','8.1']) #在csv文件里写入一行文字 “复仇者联盟”和“8.1”。 csv_file.close() #写入完成后,关闭文件就大功告成啦
存储成csv格式文件和存储成Excel文件,这两种不一样的存储方式须要引用的模块也是不一样的。操做csv文件咱们须要借助csv模块;code
操做Excel文件则须要借助openpyxl模块。
一个Excel文档也称为一个工做薄(workbook),每一个工做薄里能够有多个工做表(wordsheet),当前打开的工做表又叫活动表。
import openpyxl #引用openpyxl 。 wb = openpyxl.Workbook() #利用openpyxl.Workbook()函数建立新的workbook(工做薄)对象,就是建立新的空的Excel文件。
建立完新的工做薄后,还得获取工做表。否则程序会懵逼,不知道要把内容写入哪张工做表里。
sheet = wb.active #wb.active就是获取这个工做薄的活动表,一般就是第一个工做表。 sheet.title = 'new title' #能够用.title给工做表重命名。如今第一个工做表的名称就会由原来默认的“sheet1”改成"new title"。
添加完工做表,咱们就能来操做单元格,往单元格里写入内容。
sheet['A1'] = '漫威宇宙' #把'漫威宇宙'赋值给第一个工做表的A1单元格,就是往A1的单元格中写入了'漫威宇宙'。
往单元格里写入内容只要定位到具体的单元格,如A1(根据Excel的坐标,A1表明第一列第一行相交的单元格),而后给这个单元格赋值便可。
若是咱们想往工做表里写入一行内容的话,就得用到append函数。
row = ['美国队长','钢铁侠','蜘蛛侠'] #把咱们想写入的一行内容写成列表,赋值给row。 sheet.append(row) #用sheet.append()就能往表格里添加这一行文字。
若是咱们想要一次性写入的不止一行,而是多行内容
rows = [['美国队长','钢铁侠','蜘蛛侠'],['是','漫威','宇宙', '经典','人物']] #先把要写入的多行内容写成列表,再放进大列表里,赋值给rows。 for i in rows: sheet.append(i) #遍历rows,同时把遍历的内容添加到表格里,这样就实现了多行写入。
成功写入后,咱们千万要记得保存这个Excel文件,否则就白写啦!
wb.save('Marvel.xlsx') #保存新建的Excel文件,并命名为“Marvel.xlsx”
#写入代码 import openpyxl wb = openpyxl.Workbook() #利用openpyxl.Workbook()函数建立新的workbook(工做薄)对象,就是建立新的空的Excel文件。 sheet=wb.active sheet.title='new title' sheet['A1'] = '漫威宇宙' rows= [['美国队长','钢铁侠','蜘蛛侠'],['是','漫威','宇宙', '经典','人物']] for i in rows: sheet.append(i)#列表 print(rows) wb.save('邓紫棋.xlsx')
#读取的代码: wb = openpyxl.load_workbook('邓紫棋.xlsx') #调用openpyxl.load_workbook()函数,打开“Marvel.xlsx”文件。 sheet = wb['new title'] #获取“Marvel.xlsx”工做薄中名为“new title”的工做表。 sheetname = wb.sheetnames print(sheetname) #sheetnames是用来获取工做薄全部工做表的名字的。若是你不知道工做薄到底有几个工做表,就能够把工做表的名字都打印出来。 cell = sheet['A1'] value = A1_cell.value print(A1_value) #把“new title”工做表中A1单元格赋值给cell,再利用单元格value属性,就能打印出A1单元格的值。
#读取一列内容 import openpyxl wb = openpyxl.load_workbook('dzq.xlsx') ws = wb.get_sheet_by_name('requests') first_column = ws['A'] for i in range(len(first_column)): print(first_column[i].value)
邓紫棋歌曲评论玩家
import requests,json from bs4 import BeautifulSoup import openpyxl wb = openpyxl.Workbook() sheet = wb.active sheet.title = 'requests' sheet['A1'] = 'name' sheet['B1'] = 'url1' url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg' header = { 'Referer': 'https://y.qq.com/n/yqq/song/001X0PDf0W4lBq.html', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0' } commentid = '' for i in range(5): params = { 'g_tk': '5381', 'loginUin': '1394551891', 'hostUin': '0', 'format': 'json', 'inCharset': 'utf8', 'outCharset': 'GB2312', 'notice': '0', 'platform': 'yqq.json', 'needNewCode': '0', 'cid': '205360772', 'reqtype': '2', 'biztype': '1', 'topid': '1530858', 'cmd': '8', 'needmusiccrit': '0', 'pagenum': str(i), 'pagesize': '25', 'lasthotcommentid': commentid, 'domain': 'qq.com', 'ct': '24', 'cv': '10101010', } res = requests.get(url=url,headers=header,params=params) json_comment = res.json() # print(json_comment) list_comment = json_comment['comment']['commentlist'] for comment in list_comment: info = comment['rootcommentcontent'] user = comment['rootcommentnick'] sheet.append([info,user]) wb.save('dzq.xlsx')