爬虫-存储数据

EXCEL文件

openpyxl写文件

exce文件也被称为工作簿,其可以创建多个工作表。每个工作表是由很多个单元格组成。我们通过openpyxl来操作Excel文件。

安装

pip install openpyxl

要将内容写入Excel文件,首先要创建一个Excel表格,方法如下:

# 从 openpyxl 引入 Workbook(工作簿)类
from openpyxl import Workbook# 通过 Workbook 类实例化一个工作簿
wb = Workbook()

使用openpyxl中的Workbook类实例化了一个工作簿,即创建了一个空的Excel文件。

from openpyxl import Workbookwb = Workbook()
# 选择默认的工作表
sheet = wb.active
# 给工作表重命名
sheet.title = '8月考勤统计表'

前面也说了工作簿是由很多工作表组成的,通过wb.active选择了默认的工作表,title属性重命名了默认工作表。

# 往 A1 单元格写入小贝
sheet['A1'] = '小贝'

既然我们已经选择了工作表,那就应该往工作表中写入数据了,前面我们也说过,工作表是由很多单元格组成,我们上面就是往特定的单元格内写入数据。

上面我们是通过字典赋值的方式写入的。还可以传入一个列表,通过append()的方法一次性往工作表内写入数据。

# 写入一行数据
row = ['姓名', '出勤天数', '迟到次数']
sheet.append(row)

但在实际应用中,保存的数据肯定不止一行,这个时候我们通过for循环一行行写入。

data = [['姓名', '出勤天数', '迟到次数'],['小贝', 20, 5],['闻闻', 22, 0]
]# 写入多行数据
for row in data:sheet.append(row)

数据写完之后需要保存文件,使用wb.save("文件名.xlsx")

完整代码如下:

from openpyxl import Workbook# 新建工作簿
wb = Workbook()
# 选择默认的工作表
sheet = wb.active
# 给工作表重命名
sheet.title = '考勤统计表'data = [['姓名', '出勤天数', '迟到次数'],['小贝', 20, 5],['闻闻', 22, 0]
]# 写入多行数据
for row in data:sheet.append(row)# 保存 Excel 文件
wb.save('考勤统计.xlsx')

openpyxl读文件

有写必有读,我们先直接看代码

from openpyxl import load_workbook# 打开 Excel 文件
wb = load_workbook('考勤统计.xlsx')
# 选择考勤统计表这张工作表
sheet = wb['考勤统计表']
# 打印出所有工作表名称
print(wb.sheetnames)
# 输出:['考勤统计表']# 打印出 A1 单元格的值
print(sheet['A1'].value)
# 输出:姓名# 打印所有单元格的值
for row in sheet.rows:for cell in row:print(cell.value)
# 逐行输出:姓名 出勤天数 迟到次数 小贝 20 5 闻闻 22 0

我们以我们平时手动打开表格来理解这段代码:

  1. 首先要双击打开我们需要的表,python中使用load_workbook()方法来打开
  2. 打开表之后找到我们要找的sheet表,python中是通过wb["表名"]来获取,当然如果不知道有哪些表,我们可以通过sheetname来查看
  3. 找到了对应的表之后,我们就获取了有数据的单元格,因为数据有多行,我们需要一行行的获取,先遍历每一行,通过value属性访问

openpyxl 实战

之前我们爬取过豆瓣图书 Top 250 的数据,现在我们来用 openpyxl 将爬取的数据保存下来。为了使数据内容丰富一些,我稍微改动了一下之前爬取一页数据的代码,使它能获取图书的 书名评分 和 链接,具体代码如下:

import requests
from bs4 import BeautifulSoup
from openpyxl import Workbookwb = Workbook()
sheet = wb.active
sheet.title = '豆瓣图书Top250'
# 写入表头
header = ['书名', '评分', '链接']
sheet.append(header)headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'}
res = requests.get('https://book.douban.com/top250/', headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
# 通过 class 属性选中所有包含图书信息的整个 HTML 元素
items = soup.select('.item')
# 遍历每个元素,即遍历每本图书
for i in items:tag = i.select('div.pl2 a')[0] # 选中包含书名、书籍链接的 a 元素rating = i.select('.rating_nums')[0].text # 书籍评分name = tag['title'] # 书名link = tag['href'] # 书籍链接# 写入一行数据row = [name, rating, link]sheet.append(row)print(name, rating, link)# 保存为 豆瓣.xlsx
wb.save('豆瓣.xlsx')

 以下为结果

书名评分链接
红楼梦9.6https://book.douban.com/subject/1007305/
活着9.4https://book.douban.com/subject/4913064/
19849.4https://book.douban.com/subject/4820710/
哈利·波特9.7https://book.douban.com/subject/24531956/
三体全集9.5https://book.douban.com/subject/6518605/
百年孤独9.3https://book.douban.com/subject/6082808/
9.3https://book.douban.com/subject/1068920/
动物农场9.3https://book.douban.com/subject/2035179/
三国演义(全二册)9.3https://book.douban.com/subject/1019568/
房思琪的初恋乐园9.2https://book.douban.com/subject/27614904/
福尔摩斯探案全集(上中下)9.3https://book.douban.com/subject/1040211/
白夜行9.2https://book.douban.com/subject/10554308/
小王子9.1https://book.douban.com/subject/1084336/
安徒生童话故事集9.3https://book.douban.com/subject/1046209/
天龙八部9.2https://book.douban.com/subject/1255625/
撒哈拉的故事9.2https://book.douban.com/subject/1060068/
呐喊9.2https://book.douban.com/subject/1449351/
邓小平时代9.3https://book.douban.com/subject/20424526/
悉达多9.3https://book.douban.com/subject/26980487/
杀死一只知更鸟9.2https://book.douban.com/subject/6781808/
明朝那些事儿(1-9)9.2https://book.douban.com/subject/3674537/
失踪的孩子9.2https://book.douban.com/subject/30172069/
新名字的故事9.2https://book.douban.com/subject/26986954/
沉默的大多数9.1https://book.douban.com/subject/1054685/
野草9.5https://book.douban.com/subject/1915958/

CSV 

CSV 全称 Comma-Separated Values(逗号分隔值),它是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用

CSV 写文件

直接看代码

import csvwith open('考勤统计表.csv', 'w', newline='') as file:csv_writer = csv.writer(file)rows = [['姓名', '出勤天数', '迟到次数'],['小贝', 20, 5],['闻闻', 22, 0]]for row in rows:csv_writer.writerow(row)

首先还是导入 csv 库,接着用 w 模式(写入模式)新建一个 csv 文件,然后将得到的 file 对象传递给 csv.writer() 方法进行处理,得到一个可写入对象,接下来就可以用它来写入 csv 文件了。

和 openpyxl 类似,csv 文件也能逐行写入,openpyxl 调用的是 append() 方法,而 csv 调用的是 writerow() 方法,将表格的一行内容按顺序放到列表中作为参数传进去即可。

csv 还提供了一个更加快捷的写入多行内容的方法——writerows(),通过该方法不再需要使用 for 循环,直接将多行数据的二维列表传进去即可

import csvwith open('考勤统计表.csv', 'w', newline='') as file:csv_writer = csv.writer(file)rows = [['姓名', '出勤天数', '迟到次数'],['小贝', 20, 5],['闻闻', 22, 0]]csv_writer.writerows(rows)

CSV 读文件

import csvwith open('考勤统计表.csv', newline='') as file:csv_reader = csv.reader(file)for row in csv_reader:print(row)

首先通过 import csv 导入 csv 库,然后用 open() 函数打开 csv 文件,将得到的 file 对象传入 csv.reader() 方法进行处理,最终得到一个可读取对象。我们可以用 for 循环遍历得到的可读取对象 csv_reader 获取 csv 文件中的每一行数据。

注意:open() 函数中的第二个参数 newline='' 是为了让文件内容中的换行符能被正确解析,建议在用 csv 处理文件时都加上这个参数。

CSV 实战

直接上代码

import requests
import csv
from bs4 import BeautifulSoupwith open('豆瓣.csv', 'w', newline='') as file:csv_writer = csv.writer(file)header = ['书名', '评分', '链接']csv_writer.writerow(header)# 注意代码的层级关系,不要搞错缩进哦!headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'}res = requests.get('https://book.douban.com/top250/', headers=headers)soup = BeautifulSoup(res.text, 'html.parser')# 通过 class 属性选中所有包含图书信息的整个 HTML 元素items = soup.select('.item')# 遍历每个元素,即遍历每本图书for i in items:tag = i.select('div.pl2 a')[0] # 选中包含书名、书籍链接的 a 元素rating = i.select('.rating_nums')[0].text # 书籍评分name = tag['title'] # 书名link = tag['href'] # 书籍链接row = [name, rating, link]csv_writer.writerow(row)print(name, rating, link)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/47490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++图的基本操作

在C中,可以使用邻接矩阵或邻接表来表示图,并实现一系列基本的图操作,包括创建图、添加边、删除边、遍历图等。下面是关于图的基本操作的详细解释。 创建图: 使用邻接矩阵创建图:可以使用二维数组来表示邻接矩阵&#x…

RAG技术-为自然语言处理注入新动力

引言: 在自然语言处理(NLP)的领域中,RAG(Retrieval-Augmented Generation)技术以其独特的方式,正在改变我们与机器的交互方式。RAG技术结合了大语言模型的强大能力,使得机器在理解和…

MongoDB教程(九):java集成mongoDB

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、环境准…

SAPUI5基础知识15 - 理解控件的本质

1. 背景 经过一系列的练习,通过不同的SAPUI5控件,我们完成了对应用程序界面的初步设计,在本篇博客中,让我们一起总结下SAPUI5控件的相关知识点,更深入地理解SAPUI5控件的本质。 通常而言,一个典型UI5应用…

RocketMQ单结点安装/Dashboard安装

目录 1.安装NameServer 2.安装Broker 3.使用自带工具测试数据发送 4.使用DashBoard进行查看 5.关闭相关设备 前置条件:两台虚拟机CentOS Linux release 7.5.1804(ps:当然也可以都部署在一台机器上) RocketMq属于天生集群。需要同时启动nameServer和Broker进行…

go练习:图像

自定义 Image 类型,实现必要的方法并调用 pic.ShowImage。 Bounds 应当返回一个 image.Rectangle ,例如 image.Rect(0, 0, w, h)。 ColorModel 应当返回 color.RGBAModel。 At 应当返回一个颜色。上一个图片生成器的值 v 对应于此次的 color.RGBA{v, …

CMMI认证是什么?做CMMI认证的必要条件?CMMI认证的重要性

CMMI(Capability Maturity Model Integration)认证,作为企业追求卓越软件工程实践的标志,其实现过程既严谨又复杂。首先,我们需要深入理解CMMI的核心理念,即持续的过程改进和成熟度提升。 为了实现CMMI认证…

redistemplate介绍与演示

redistemplate是一个用于在Redis中存储和检索数据的模板库。它提供了一组简单易用的函数和接口,使开发者能够更方便地使用Redis进行数据操作。 使用redistemplate,你可以实现以下功能: 存储和检索数据:redistemplate提供了存储和…

Lucene 索引文件详解:结构与工作原理

Lucene 索引文件详解:结构与工作原理 Apache Lucene 是一个强大的搜索引擎库,用于为大规模文本数据创建搜索和索引功能。Lucene 使用特定的文件格式来存储索引,以便高效地进行搜索。理解这些索引文件格式对于调优性能和解决潜在问题非常重要…

C++ 几何计算库

代码 #include <iostream> #include <list> #include <CGAL/Simple_cartesian.h> #include <CGAL/AABB_tree.h> #include <CGAL/AABB_traits.h> #include <CGAL/AABB_segment_primitive.h> #include <CGAL/Polygon_2.h>typedef CGAL…

每天一个数据分析题(四百三十二)- 假设检验

在假设检验问题中&#xff0c;原假设为H0 &#xff0c;给定显著水平为α&#xff0c;则关于假设检验的原理说法正确的是 A. 中心极限定理 B. 小概率事件 C. 置信区间 D. 正态分布的性质 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答…

线性代数|机器学习-P24加速梯度下降(动量法)

文章目录 1. 概述2. 引入3. 动量法梯度下降 1. 概述 我们之前学的最速梯度下降[线搜索方法] 公式如下&#xff1a; x k 1 x k − s k ∇ f ( x k ) \begin{equation} x_{k1}x_k-s_k\nabla f(x_k) \end{equation} xk1​xk​−sk​∇f(xk​)​​ 但对于这种方法来说&#xff…

助力数据记录:Connext的Historian功能启动指南

​ 在工业自动化领域&#xff0c;Connext以其全新的OPCUA数据采集解决方案为核心&#xff0c;不仅拥有超越传统的扩展功能&#xff0c;而且在多个行业中都得到了广泛的认证。Connext能够快速找出解决方案并迅速部署&#xff0c;整个过程不会影响到原有的生产。它的强大之处在于…

Android12 禁用adb

这种做法没有删除任何adb相关的东西&#xff0c;只是设置persist.sys.usb.config中的adb相关属性时添加宏控制。 userdebug版本一样可以禁用 添加宏开关 device/mediatek/mt6761/BoardConfig.mk # for adb ADB_ENABLE:false添加ro.adb.enabled属性 build/make/core/main.mk…

信创学习笔记(三),信创之操作系统OS思维导图

创作不易 只因热爱!! 热衷分享&#xff0c;一起成长! “你的鼓励就是我努力付出的动力” 一. 回顾信创CPU芯片 1. x86应用生态最丰富, 海光(3,5,7)授权较新,无桌面授权,多用于服务器 兆芯(ZX, KX, KH)授权较早期. 2. ARMv8移动端应用生态丰富, 华为鲲鹏(9) ,制裁中&#xff0c;…

基于python的三次样条插值原理及代码

1 三次样条插值 1.1 三次样条插值的基本概念 三次样条插值是通过求解三弯矩方程组&#xff08;即三次样条方程组的特殊形式&#xff09;来得出曲线函数组的过程。在实际计算中&#xff0c;还需要引入边界条件来完成计算。样条插值的名称来源于早期工程师制图时使用的细长木条&…

oracle 经营范围 设计

在Oracle数据库中设计经营范围通常涉及创建相关的数据库表来记录和管理经营范围内的数据。以下是一个简单的例子&#xff0c;展示了如何设计一个经营范围表&#xff1a; CREATE TABLE business_units (bu_id NUMBER PRIMARY KEY,bu_name VARCHAR2(100),parent_bu_id NUMBER,CO…

探索Node.js中的node-xlsx:将Excel文件解析为JSON

在Node.js开发中&#xff0c;处理Excel文件是一个常见需求&#xff0c;特别是在需要导入大量数据或生成报表的场景中。node-xlsx 是一个强大的库&#xff0c;它提供了Excel文件的解析和生成功能。本文将深入探讨 node-xlsx 的使用&#xff0c;并通过一个案例演示如何将Excel文件…

算法——双指针(day2)

目录 202.快乐数 题目解析&#xff1a; 算法解析&#xff1a; 代码&#xff1a; 11.盛最多水的容器 题目解析&#xff1a; 算法解析&#xff1a; 代码&#xff1a; 202.快乐数 力扣链接&#xff1a;202.快乐数 题目解析&#xff1a; 本文中最重要的一句话就是重复平方和…