项目十:学会python爬虫数据保存(小白圆满级)

前言

上篇我们学会的文本文件、csv文件和excel文件的相关基础知识和操作,这一次我们再来了解一下四个文件操作方式

存储方法
HTML文件

将数据保存为HTML格式,可以直接在浏览器中查看。

使用字符串拼接将数据保存为HTML格式。

代码案例

# 创建数据列表
data = [{'name': 'Alice', 'age': 25, 'city': 'New York'},{'name': 'Bob', 'age': 30, 'city': 'San Francisco'},# 其他数据行
]# 构建 HTML 内容
html_data = "<h1>Users</h1>\n"
for item in data:html_data += "<div>\n"for key, value in item.items():html_data += f"  <p>{key}: {value}</p>\n"html_data += "</div>\n"# 将HTML内容写入文件
with open('data.html', 'w', encoding='utf-8') as f:f.write(html_data)

输出结果

代码解释(解释较难的代码)

1.初始化一个名为 html_data 的字符串,它将用来存储最终的HTML内容。首先添加一个 <h1> 标签,表示一级标题,标题文本为 "Users"。

html_data = "<h1>Users</h1>\n"

2.开始一个 for 循环,遍历 data 列表中的每个字典(即每个用户的信息)。

for item in data:

3.对于每个用户,html_data 字符串会追加一个新的 <div> 标签,用来包裹该用户的详细信息。

 html_data += "<div>\n"

4.在这个 <div> 内部,开始另一个 for 循环,遍历当前用户字典 item 中的每个键值对。

for key, value in item.items():

5.对于每个键值对,html_data 字符串会追加一个带有格式化文本的 <p> 标签。这里使用了格式化字符串字面量(f-string),将键(key)和值(value)插入到 <p> 标签的文本中,并以冒号分隔。

html_data += f" <p>{key}: {value}</p>\n"

6.在添加完当前用户的所有信息后,html_data 字符串会追加一个 </div> 标签来关闭 <div>

html_data += "</div>\n"
JSON文件

以JSON格式保存数据,易于阅读和跨语言交换数据。

使用json模块将数据保存为JSON格式。

代码案例

import json
data = {"name": "John", "age": 30, "city": "New York"}
with open('data.json', 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=4)

输出结果

代码解释

 1.导入json模块:

import json

这行代码从Python标准库中导入了json模块,该模块用于处理JSON数据。

2.创建字典数据:

data = {"name": "John", "age": 30, "city": "New York"}

这里创建了一个名为data的字典,包含了键值对:"name"对应"John""age"对应30"city"对应"New York"

3.打开文件:

with open('data.json', 'w', encoding='utf-8') as f:

使用with语句打开一个名为data.json的文件,用于写入操作:

  • 'data.json'是文件的名称。
  • 'w'表示写入模式,如果文件已存在,它会被覆盖;如果不存在,将会创建一个新文件。
  • encoding='utf-8'确保文件以UTF-8编码保存,这对于包含非ASCII字符的数据很重要。

4.使用json.dump()写入JSON数据:

json.dump(data, f, ensure_ascii=False, indent=4)

json.dump()函数用于将Python对象转换为JSON格式的字符串,并写入到指定的文件中:

  • data是要转换为JSON格式的字典对象。
  • f是文件对象,即上面打开的data.json文件。
  • ensure_ascii=False指示json.dump()允许输出非ASCII字符,而不是将它们转义为\uXXXX形式。
  • indent=4指定了输出的缩进级别,使得JSON文件具有可读性,每个层级缩进4个空格。

整个代码块的作用是创建一个包含个人信息的字典,并将其以格式化的JSON格式保存到文本文件中。这种格式的文件易于阅读和处理,常用于数据交换和配置文件。

XML文件

可扩展标记语言,适合存储结构化数据。

使用xml.etree.ElementTree模块将数据保存为XML格式。

代码案例

#导入ElementTree模块
import xml.etree.ElementTree as ET
# 创建数据列表
data = [{'name': 'Alice', 'age': 25, 'city': 'New York'},{'name': 'Bob', 'age': 30, 'city': 'San Francisco'}
]
#创建根元素
root = ET.Element('users')
# 遍历数据列表,创建子元素
for item in data:user = ET.SubElement(root, 'user') # 创建子元素# 遍历字典,创建属性子元素for key, value in item.items():# 创建属性子元素ET.SubElement(user, key).text = str(value)
# 写入XML文件
tree = ET.ElementTree(root)
tree.write('data.xml', encoding='utf-8', xml_declaration=True)

输出结果

数据库文件

使用关系型数据库(如MySQL、PostgreSQL)或非关系型数据库(如MongoDB)存储结构化数据。

使用sqlite3模块将数据保存到SQLite数据库中。

代码案例

import sqlite3#导入sqlite3模块conn = sqlite3.connect('data.db')#连接到数据库
cursor = conn.cursor()#创建游标
#创建users表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (name TEXT,age INTEGER,city TEXT
)
''')
#插入数据
data = ('John', 30, 'New York')
#?占位符,防止SQL注入攻击
cursor.execute('INSERT INTO users VALUES (?, ?, ?)', data)
conn.commit()#提交事务
cursor.close()#关闭游标
conn.close()#关闭连接

输出结果

好了,今日分享到此一游,我是好运,想要好运。

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

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

相关文章

Cookie、Session以及Token的区别

Cookei、Session以及Token总的来说都是为了实现客户端访问服务器数据而利用的一种手段&#xff0c;可以把服务器数据看成是密码箱&#xff0c;而它们是三种不同的钥匙。 一、定义 1.Cookie 客户端第一次访问服务器时&#xff0c;服务器返回cookie给客户端A&#xff0c;客户端…

010 springboot整合mybatis-plus 登录页面和首页不拦截

文章目录 customer.sqlConfigRegistCenter.javaCustomerController.javaCustomer.javaLoginCustomer.javaJwtInterceptor.javaCustomerMapper.javaICustomerService.javaCustomerServiceImpl.javaJwtUtil.javaServerResult.javaServletInitializer.javaSpringbootLoginApplicat…

NB14 牛群编号的回文顺序

原题链接 牛群编号的回文顺序_牛客题霸_牛客网 (nowcoder.com) 一种可行的思路 先遍历链表, 将节点的值(1-9)用 StringBuffer 给存起来 用动态规划来解题 然后再用 dp 来解题 状态转移方程为: dp[i][j] dp[i 1][j - 1] && strB[i] strB[j] (i > j 1) dp[…

vue中多个.vue文件中style里定义同一个class的样式 会相互覆盖吗?

在Vue项目中&#xff0c;每个Vue文件&#xff08;通常是一个.vue单文件组件&#xff09;中定义的样式默认情况下是局部作用域的&#xff0c;也就是说&#xff0c;它们不会影响到其他组件&#xff0c;也不会被其他组件中的样式所覆盖。这是通过Vue单文件组件中的<style>标…

ABTest如何计算最小样本量-工具篇

如果是比例类指标&#xff0c;有一个可以快速计算最小样本量的工具&#xff1a; https://www.evanmiller.org/ab-testing/sample-size.html 计算样本量有4个要输入的参数&#xff1a;①一类错误概率&#xff0c;②二类错误概率 &#xff08;一般是取固定取值&#xff09;&…

第 394 场 LeetCode 周赛题解

A 统计特殊字母的数量 I 哈希&#xff1a;遍历然后枚举 class Solution {public:int numberOfSpecialChars(string word) {unordered_map<char, int> m;for (auto ch : word)m[ch] 1;int res 0;for (char ch a; ch < z; ch)if (m.count(ch) && m.count(A …

VSCode 常用配置

文章目录 插件安装插件设置 推荐设置1. 控制具有未保存更改的编辑器的 自动保存2. 启用自动猜测编码3. 平滑滚动和光标闪烁的设置4. 自动格式化的设置5. 自动换行功能6. 按下回车键时如何接受代码建议的行为7. 建议列表中如何预先选择建议8. 启用自定义对话框样式9. 控制着是否…

【SpringCloud】OpenFeign高级特性

【SpringCloud】OpenFeign高级特性 文章目录 【SpringCloud】OpenFeign高级特性1. 超时控制1.1 全局配置1.2 指定配置 2. 重试机制3. 替换Http客户端3.1 引入依赖3.2 配置 4. 请求/响应压缩5. 日志打印6. 综合配置 1. 超时控制 默认OpenFeign客户端等待60秒钟&#xff0c;但是服…

使用Python实现简单的Web服务器

Python是一种非常灵活的编程语言&#xff0c;它不仅能够处理复杂的数据分析和机器学习任务&#xff0c;还能用于创建简单的Web应用。本文将介绍如何使用Python内置的HTTP服务器模块来创建一个基本的Web服务器&#xff0c;并展示如何通过源码实现简单的路由和请求处理。 环境准…

【运维】docker-compose部署redis

部署Redis使用docker-compose是一种简便且流行的方式。以下是基本的docker-compose.yml文件示例&#xff0c;用于部署单节点Redis服务 方案一 直接使用docker安装单机版 创建.env环境文件并配置管理密码 echo REDIS_PWDredis123456 > .env创建docker-compose.yml环境文件…

8.4.1 实验1:创建 VLAN 和划分端口

1、实验目的 通过本实验可以掌握&#xff1a; VLAN的概念。创建VLAN的方法。把交换机端口划分到VLAN中的方法。 2、实验拓扑 创建 VLAN 和划分端口的实验拓扑如下图所示。 图8-5 创建 VLAN 和划分端口的实验拓扑 3、实验步骤 &#xff08;1&#xff09;实验准备 S1#eras…

创建一个空的maven项目,整合SpringBoot和Redis

创建一个空的maven项目&#xff0c;整合SpringBoot和Redis 创建空的maven项目 在最新版的idea中创建maven项目的时候会让选择模板 如下图&#xff1a; 我们选择quickstart快速开始模板&#xff0c;quickstart快速开始模板创建的maven项目里面什么都不带&#xff0c;只有一个…

苹果手机里的HEIC图片可以转换成普通的JPG格式吗?什么是HEIC图片格式?

在现代社会中&#xff0c;随着智能手机技术的不断发展&#xff0c;我们越来越依赖于手机来记录生活的点滴。其中&#xff0c;拍照成为了人们记录生活的重要手段之一。苹果手机作为市场上的热门品牌&#xff0c;其拍摄的照片质量自然也是备受赞誉。然而&#xff0c;苹果手机默认…

Java面试八股之Java中==和equals()的区别

Java中和equals()的区别 操作符&#xff1a; 对于基本数据类型&#xff08;如int、char、boolean等&#xff09;&#xff0c;比较的是它们的值是否相等。 对于对象引用类型&#xff0c;比较的是两个对象的内存地址&#xff08;即是否指向同一个对象实例&#xff09;。也就是…

4.25日学习记录

[HZNUCTF 2023 preliminary]ppppop 对于php反序列化&#xff0c;在之前的学习中有过了解&#xff0c;但是对于序列化字符串的格式不是很了解&#xff0c;刚好接触这题&#xff0c;可以了解一下 序列化字符串的格式&#xff1a; 布尔型&#xff08;bool&#xff09;b&#xf…

ubuntu20.04开机运行java的sh脚本

用到了 rc.local 1、修改 /usr/lib/systemd/system/rc-local.service 在最下面添加 [Install] WantedBymulti-user.target 2、 系统没有 rc.local&#xff0c;需要手动创建 cd /etc vi rc.local在里面写入 /opt/start.sh chmod x /etc/rc.local # 添加可执行权限 chmod x…

基于小程序实现的惠农小店系统设计与开发

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

队列的实现(c语言实现)

队列的定义 队列&#xff08;Queue&#xff09;是一种特殊的线性数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。这意味着最早被添加到队列中的元素将是最先被移除的元素。队列的主要操作包括入队&#xff08;enqueue…

【错题集-编程题】数组中的最长连续子序列(排序 + 模拟)

牛客对应链接&#xff1a;数组中的最长连续子序列_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 排序 模拟。 注意&#xff1a;值连续&#xff0c;位置可以不连续&#xff01;小心处理数字相同的情况。 二、代码 //值得学习的代码 class Solution { public:int MLS(vecto…

数字藏品:重塑艺术与科技的新媒介

数字藏品&#xff0c;这个新兴的词汇&#xff0c;正在逐渐渗透到我们的日常生活中。它不仅是一种新的艺术表达方式&#xff0c;更是一种科技与艺术相结合的全新媒介。那么&#xff0c;数字藏品究竟是什么呢&#xff1f; 首先&#xff0c;我们需要明确一点&#xff0c;数字藏品并…