一、存储数据的方式

同样是存储数据的文件,“csv”格式文件和Excel文件有什么区别呢?

1. CSV文件

  • 我们知道json是特殊的字符串。其实,csv也是一种字符串文件的格式,它组织数据的语法就是在字符串之间加分隔符——行与行之间是加换行符,同列之间是加逗号分隔。
  • csv格式文件可以用任意的文本编辑器打开(如记事本),也可以用Excel打开,还可以通过Excel把文件另存为csv格式(因为Excel支持csv格式文件)。
  • csv文件里的逗号充当分隔同列字符串的作用。分隔符使得数据的组织方式更有规律,这让更容易让我们提取和查找。

2. EXCEL文件

  • 它有专门的文件格式,即xls和xlsx(Excel2003版本的文件格式是xls,Excel2007及之后的版本的文件格式就是xlsx)。

3. CSV文件与EXCEL文件的比较

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

二、存储数据的基础知识

存储成csv格式文件和存储成Excel文件,这两种不同的存储方式需要引用的模块也是不同的。操作csv文件我们需要借助csv模块;操作Excel文件则需要借助openpyxl模块。

1. CSV文件的读写

import csv# 需要写入的数据
score1 = ['math', 95]
score2 = ['english', 90]# 打开文件,追加a, newline="",可以删掉行与行之间的空格
file= open("score.csv", "a", newline="")# 设定写入模式
csv_write = csv.writer(file)# 写入具体内容
csv_write.writerow(score1)
csv_write.writerow(score2)
file.close()
  • 代码file= open(“score.csv”, “a”, newline="")事实上就是创建了一个csv文件并打开它,等待写入文件。
  • 代码csv_write = csv.writer(file),创建了一个csvwrite对象。
  • 下面两行代码就用该对象的writerow方法写入列表数据。
import csv# 打开csv文件
file = open("score.csv")# 读取文件内容,构造csv.reader对象
reader = csv.reader(file)# 打印reader中的内容
for item in reader:print(item)

第二行的代码就是打开我们已有的csv文件,然后构造一个csv.reader对象,最后把reader中的内容输出,读取csv的工作也就完成了。

2. EXCEL文件的读写

安装openpyxl库

  • Windows系统:pip install openpyxl
    Macx系统:pip3 install openpyxl

EXCEL文件的写入

import openpyxl
# 引用openpyxl
wb = openpyxl.Workbook()
# 利用openpyxl.Workbook()函数创建新的workbook(工作薄)对象,就是创建新的空的Excel文件。
sheet = wb.active
# wb.active就是获取这个工作薄的活动表,通常就是第一个工作簿,也就是我们在上面的图片中看到的sheet1。
sheet.title = 'test'
# 可以用.title给工作表重命名。现在第一个工作表的名称就会由原来默认的“sheet1”改为"kaikeba"。
sheet['A1'] = '天下第一'
# 向单个单元格写入数据
score1 = ['math', 95]
sheet.append(score1)
# 写入整行的数据,变量类型是一个列表
wb.save('score.xlsx')
# 保存修改的Excel
wb.close()
# 关闭Excel

示例代码中我们是用到append方法向Excel写入一行内容,要写入多个内容只需添加一个循环即可。

EXCEL文件的读取

import openpyxl
wb = openpyxl.load_workbook('score.xlsx')
# 打开的指定的工作簿
sheet = wb['天下第一']
# 指定读取的工作表的名称
A1_value = sheet['A1'].value
print(A1_value)
# 获取A1的值

三、爬取并存储周杰伦的歌曲信息

import requests
import openpyxl# 创建workbook对象,建立工作簿
workbook = openpyxl.Workbook()
# 创建工作表
sheet = workbook.active
# 重命名工作表
sheet.title  = 'Jac_chou_songs'
# 插入表头
sheet.append(['页码','歌名','歌曲ID','专辑名称','播放时长','播放链接','歌词'])# 伪装歌曲请求头
headers = {'orgin': 'https://y.qq.com','referer': 'https://y.qq.com/portal/search.htm','user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'}
# 歌曲请求的网址
url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
# 循环更新页码
for i in range(1,4):# 歌曲请求参数param_song = {'ct': '24','qqmusic_ver': '1298','new_json': '1','remoteplace': 'txt.yqq.song','searchid': '67279455817994118','t': '0','aggr': '1','cr': '1','catZhida': '1','lossless': '0','flag_qc': '0','p': i,'n': '10','w': '周杰伦','g_tk': '1987388883','loginUin': '1285575771','hostUin': '0','format': 'json','inCharset': 'utf8','outCharset': 'utf-8','notice': '0','platform': 'yqq.json','needNewCode': '0'}# 使用requests.get(),获取返回的数据response = requests.get(url,params=param_song,headers=headers)# 使用json(),将字符串转为列表/字典js_music = response.json()# 层层展开字典,获取歌曲列表list_musci = js_music['data']['song']['list']# 遍历歌曲列表,获取每首歌曲的信息for music in list_musci:# 歌名title = music['name']# 歌曲IDid = music['id']# 歌曲所属专辑album = music['album']['name']# 歌曲播放时长time = music['interval']# 歌曲链接link = 'https://y.qq.com/n/yqq/song/'+music['mid']+'.html'# 伪装歌词请求头headers_lyric = {'origin': 'https://y.qq.com','referer': 'https://y.qq.com/n/yqq/song/{}.html'.format(music['mid']),'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'}# 歌词urlurl_lyric = 'https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_yqq.fcg'# 歌词请求参数param_lyric = {'nobase64': '1','musicid': id,'-': 'jsonp1','g_tk': '1847098181','loginUin': '1285575771','hostUin': '0','format': 'json','inCharset': 'utf8','outCharset': 'utf-8','notice': '0','platform': 'yqq.json','needNewCode': '0'}# 请求返回歌词的数据response_lyric = requests.get(url_lyric,params=param_lyric,headers=headers)# 使用json()方法,转换为字典/列表js_lyric = response_lyric.json()# 展开字典,获取歌词lyric = js_lyric['lyric']# 将歌曲信息写入excel文件中sheet.append([i,title,id,album,time,link,lyric])# 打印,以便发现问题print('页码:'+str(i))print('歌名:'+title)print('歌曲ID:'+str(id))print('专辑名:'+album)print('播放时长:'+str(time)+'秒')print('播放链接:'+link)print('歌词:'+lyric)# 保存excel文件,并命名为Jay_chou_songs.xlsx
workbook.save('Jay_chou_songs.xlsx')
# 关闭文件
workbook.close()

四、总结




五、练习

  1. 爬取豆瓣TOP250的电影信息,并存入EXCEL文件中。
import requests
from bs4 import BeautifulSoup
import openpyxl# 请求头,避免反爬
headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'}
# 使用requests.get()获取response对象,循环更新每页的页码# 创建xlsx工作簿
wb = openpyxl.Workbook()
# 创建工作表
sheet = wb.active
# 将工作表命名为豆瓣电影250
sheet.title = '豆瓣电影TOP250'
# 添加工作表头
sheet.append(['序号', '电影名称', '网址URL', '导演/演员', '评价信息', '影片简介'])# 观察豆瓣TOP250的影片的URL,规律为每页间隔25.
for i in range(10):reponse = requests.get(f'https://movie.douban.com/top250?start={i * 25}&filter=', headers=headers)# 将返回的字符串转换为bs对象bs_movie = BeautifulSoup(reponse.text, 'html.parser')# 通过find_all找到包含电影信息的列表list_movie = bs_movie.find_all('div', class_='item')# 循环遍历列表,返回每个电影的信息for movie in list_movie:# 电影序号num = movie.find('em').text# 电影标题title = movie.find('div', class_='hd').find('a').text.replace(' ', '').replace('\n', '')# 电影网址URLurl = movie.find('a')['href']# 电影导演与演员director = movie.find('p').text.replace(' ', '').replace('\n', '')# 电影评价信息rating = movie.find('div', class_='star').text.replace(' ', '').replace('\n', '/')# 电影简介,因第248条没有简介信息返回,所以使用异常捕捉报错try:info = movie.find('p', class_='quote').text.replace('\n', '')except:info = None# 将电影信息逐行写入xlsx文件中sheet.append([num, title, url, director, rating, info])# 打印,以便发现问题print(num)print(title)print(director)print(rating)print(info)# 保存文件为"豆瓣点评TOP250.xlsx"
wb.save('豆瓣电影TOP250.xlsx')
# 关闭文件
wb.close()
  1. 爬取知乎张佳伟的前三页文章,并存入CSV文件中。
import requests
import csv# 创建csv文件,并命名为"张佳伟.csv",以追加模式写入
file = open('zhangjiawei.csv','a+',newline='')
file_writer = csv.writer(file)
# 写入表头
file_writer.writerow(['序号','文章标题','文章ID','点赞数','评论数','文章简介','文章链接'])
# 伪装请求头
headers = {'referer': 'https://www.zhihu.com/people/zhang-jia-wei/posts','user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'}
# 请求的url
url = 'https://www.zhihu.com/api/v4/members/zhang-jia-wei/articles'
x = 1
# 循环更改页码参数
for i in range(4):# 请求参数param = {'include': 'data[*].comment_count,suggest_edit,is_normal,thumbnail_extra_info,thumbnail,can_comment,comment_permission,admin_closed_comment,content,voteup_count,created,updated,upvoted_followees,voting,review_info,is_labeled,label_info;data[*].author.badge[?(type=best_answerer)].topics','offset': str(i*20),'limit': 20,'sort_by': 'created'}# requests.get()返回数据response = requests.get(url,params=param,headers=headers)# 使用json(),将字符串转换为字典/列表js_response = response.json()# 展开字典,获取文章列表list_article = js_response['data']# 遍历列表,获取文章信息for article in list_article:# 文章标题title = article['title']# 文章简介content = article['excerpt']# 文章IDid = article['id']# 文章点赞数voteup = article['voteup_count']# 文章评论数comment = article['comment_count']# 文章URLurl_article = 'https://zhuanlan.zhihu.com/p/{}.html'.format(id)# 将文章信息写入csv中file_writer.writerow([x,title,id,voteup,comment,url_article])# 打印文章信息,以便发现问题print(x)print(title)print(id)print(voteup)print(comment)print(url_article)print()x = x + 1# 关闭文件
file.close()

Python爬虫第五课:存储数据相关推荐

  1. Python爬虫第五课 购票项目爬虫实战

    12306购票抓包分析以及任务分解 学习目标: 了解 12306抓包过程 1.1 抓包分析 使用谷歌浏览器或fiddler等抓包工具完成登陆以及购票操作,进行抓包,根据 具有业务作用 或 被set-c ...

  2. 第五章 存储数据 web scraping with python

    第五章.存储数据 尽管在终端打印是有很多乐趣的,但是当谈到数据汇总和分析时候这不是非常有用的.为了使大部分的爬虫有用,你需要能够保存它们抓取的信息. 在本章中,我们将着眼于的三个数据管理的方法满足任何 ...

  3. python爬虫练习五(补充): 2018年统计用区划代码和城乡划分代码(附代码与全部数据)

    之前爬取过2017年的数据 详见 Python爬虫练习五:爬取 2017年统计用区划代码和城乡划分代码(附代码与全部数据) ,下面有评论说广东省的数据缺少了东莞与中山两个市的数据,检查网页结构发现确实 ...

  4. Python爬虫之猫眼APP电影数据(十八)

    原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 本次代码的环境: 运行平台: Windows Python版本: ...

  5. Python爬虫进阶五之多线程的用法

    前言 我们之前写的爬虫都是单个线程的?这怎么够?一旦一个地方卡到不动了,那不就永远等待下去了?为此我们可以使用多线程或者多进程来处理. 首先声明一点! 多线程和多进程是不一样的!一个是 thread ...

  6. Python爬虫《自动化学报》数据爬取与数据分析

    Python爬虫<自动化学报>数据爬取与数据分析 文章目录 Python爬虫<自动化学报>数据爬取与数据分析 前言 一.代码 二.结果展示 三.爬虫实现 1.准备 2.获取网页 ...

  7. 浅谈Python爬虫(五)【网易云热评爬取实例】

    浅谈Python爬虫(五) 目的:爬取网易云歌单所有歌曲的信息及热评 Python环境:3.7 编译器:PyCharm2019.1.3专业版 存储格式:JSON 1.分析网页 进入网易云音乐首页,点击 ...

  8. 在python中使用json格式存储数据

    在python中使用json格式存储数据 代码如下: import jsonlist1 = [{'A': [1, 2, 3, 4, 5, 6], 'B': [3, 4, 5, 6, 7]},{'C': ...

  9. python爬网页数据用什么_初学者如何用“python爬虫”技术抓取网页数据?

    原标题:初学者如何用"python爬虫"技术抓取网页数据? 在当今社会,互联网上充斥着许多有用的数据.我们只需要耐心观察并添加一些技术手段即可获得大量有价值的数据.而这里的&quo ...

最新文章

  1. 目标感太弱怎么办?如何做目标管理?
  2. mysql按特定的顺序_如何在MySQL中按特定顺序排列数据?
  3. 如何给Typora安装主题
  4. boost::geometry::remove_spikes用法的测试程序
  5. 抽象类与接口 day-11.2
  6. 比较一下以“反射”和“表达式”执行方法的性能差异【转】
  7. java ==陷阱_Java小陷阱
  8. 98.set_include_path()
  9. 常用chrome插件常用FireFox插件
  10. juc-并发工具类源码解析
  11. mysql 递归查询所有父级
  12. BackTrack 4 R2 发布
  13. Python规范神器(PEP8 ),Pylint是代码检查工具
  14. 等比 / 等差数列求和公式
  15. android 腾讯云聊天,腾讯云视频通话
  16. 进程管理和P V操作
  17. freescale S12X微控制器 模拟EEPROM 快速上手指南
  18. 绝对值信号的编码器有哪些信号输出(三、四)
  19. 500kV某变电站红外测温 检测技术方案
  20. Matlab:创建、串联和扩展矩阵

热门文章

  1. 用ssm写一个web的增删改查
  2. 关于time.clock()废弃
  3. 广州楼盘抓取分析1-数据抓取
  4. jpg格式电脑怎么弄_文件类型怎么更改jpg_电脑更改文件类型的具体方法
  5. youku 的广告必须要屏蔽
  6. 如何成为一名卓越的数据科学家?
  7. java获取calendar_java--获取当前时间(Calendar类)
  8. 关于web语义化的一些感悟
  9. ThingsBoard教程(三四):筛选规则节点 根据资产,设备,筛选,asset profile switch,device profile switch
  10. Kafka新手入门-000 QuickStart 里面介绍视频的字幕整理