15分钟学 Python 第39天:Python 爬虫入门(五)

news2025/2/3 22:54:48

Day 39:Python 爬虫入门数据存储概述

在进行网页爬虫时,抓取到的数据需要存储以供后续分析和使用。常见的存储方式包括但不限于:

  • 文件存储(如文本文件、CSV、JSON)
  • 数据库存储(如SQLite、MySQL、MongoDB)
  • 内存存储(如使用Python的数据结构)

每种存储方式有其优缺点,选择合适的存储方案可以提高数据处理效率。

一、文件存储

1.1 文本文件

文本文件是最简单的数据存储方式,适合于小规模数据。可以使用Python的内置文件操作来实现数据写入和读取。

示例代码:

# 写入数据到文本文件
data = "Hello, World!"
with open("output.txt", "w") as file:
    file.write(data)

# 从文本文件读取数据
with open("output.txt", "r") as file:
    content = file.read()
print(content)  # 输出: Hello, World!

1.2 CSV文件

CSV(Comma Separated Values)文件用于存储表格数据,适合处理结构化数据。可以使用Python的csv模块来处理CSV文件。

示例代码:

import csv

# 写入数据到CSV文件
data = [["name", "age"], ["Alice", 30], ["Bob", 25]]
with open("output.csv", "w", newline="") as file:
    writer = csv.writer(file)
    writer.writerows(data)

# 从CSV文件读取数据
with open("output.csv", "r") as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)  # 输出: ['name', 'age'], ['Alice', '30'], ['Bob', '25']

1.3 JSON文件

JSON(JavaScript Object Notation)文件适合存储嵌套的数据结构,易于人类阅读和书写。可以使用Python的json模块。

示例代码:

import json

# 写入数据到JSON文件
data = {
    "users": [
        {"name": "Alice", "age": 30},
        {"name": "Bob", "age": 25}
    ]
}
with open("output.json", "w") as file:
    json.dump(data, file)

# 从JSON文件读取数据
with open("output.json", "r") as file:
    content = json.load(file)
print(content)  # 输出: {'users': [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}]}

二、数据库存储

对于大规模数据及高效查询,使用数据库存储更为合适。常用的数据库有SQLite、MySQL和MongoDB。

2.1 SQLite

SQLite是一个轻量级的关系数据库,适合小型应用。Python内置支持SQLite,通过sqlite3模块操作。

示例代码:

import sqlite3

# 创建数据库连接
conn = sqlite3.connect('example.db')
c = conn.cursor()

# 创建表
c.execute('''CREATE TABLE users (name text, age integer)''')

# 插入数据
c.execute("INSERT INTO users VALUES ('Alice', 30)")
c.execute("INSERT INTO users VALUES ('Bob', 25)")

# 提交并关闭连接
conn.commit()
conn.close()

# 查询数据
conn = sqlite3.connect('example.db')
c = conn.cursor()
for row in c.execute('SELECT * FROM users'):
    print(row)  # 输出: ('Alice', 30), ('Bob', 25)
conn.close()

2.2 MySQL

MySQL是一个广泛使用的关系数据库,适合大规模的应用。首先要安装mysql-connector-python模块。

示例代码:

import mysql.connector

# 创建数据库连接
conn = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword",
    database="yourdatabase"
)
cursor = conn.cursor()

# 创建表
cursor.execute("CREATE TABLE users (name VARCHAR(255), age INT)")

# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 30)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Bob', 25)")

# 提交事务并关闭连接
conn.commit()
cursor.close()
conn.close()

# 查询数据
conn = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword",
    database="yourdatabase"
)
cursor = conn.cursor()

cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
    print(row)  # 输出: ('Alice', 30), ('Bob', 25)

cursor.close()
conn.close()

2.3 MongoDB

MongoDB是一个文档型数据库,适合存储非结构化数据。使用pymongo模块进行操作。

示例代码:

from pymongo import MongoClient

# 创建数据库连接
client = MongoClient('localhost', 27017)
db = client["testdb"]
collection = db["users"]

# 插入数据
collection.insert_one({"name": "Alice", "age": 30})
collection.insert_one({"name": "Bob", "age": 25})

# 查询数据
for user in collection.find():
    print(user)  # 输出: {'_id': ..., 'name': 'Alice', 'age': 30}, {'_id': ..., 'name': 'Bob', 'age': 25}

client.close()

三、内存存储

在某些情况下,可以将数据存储在内存中,适合快速处理和临时使用。使用Python的内置数据结构(如字典、列表)即可。

示例代码:

# 使用Python内置数据结构存储数据
data_storage = []

# 存储数据
data_storage.append({"name": "Alice", "age": 30})
data_storage.append({"name": "Bob", "age": 25})

# 读取数据
for item in data_storage:
    print(item)  # 输出: {'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}

四、选择适合的存储方式

在选择数据存储方式时,考虑以下几点:

  1. 数据规模:数据量小可使用文件存储,量大则应考虑数据库。
  2. 查询需求:如果需要复杂查询,选择数据库存储更为合适。
  3. 数据结构:嵌套数据优先考虑JSON文件或MongoDB。
  4. 性能要求:内存存储能提供最快的读取速度,但数据持久化不可用。

五、数据存储流程图

以下是一个简单的数据存储流程图,帮助理解数据存储的步骤:

[网页爬虫]
     |
     V
[数据提取]
     |
     V
[选择存储方式]
     |
     +----- [文件存储] -----+
     |                     |
     |                     |
     +----- [数据库存储] --+
     |                     |
     |                     |
     +----- [内存存储] ----+
     |
     V
[存储数据]

六、总结

数据存储是爬虫开发中的一个关键环节,不同的存储方式各有优劣,学习如何高效存储数据对于数据分析、后续利用都至关重要。通过上述讲解,您可以更好地选择数据存储方案以满足不同需求。


在这里插入图片描述

怎么样今天的内容还满意吗?再次感谢观众老爷的观看。
最后,祝您早日实现财务自由,还请给个赞,谢谢!

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

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

相关文章

多模态理论基础——什么是多模态?

文章目录 多模态理论1.什么是多模态(multimodal)2.深度学习中的多模态 多模态理论 1.什么是多模态(multimodal) 模态指的是数据或者信息的表现形式,如文本、图像、音频、视频等 多模态指的是数据或者信息的多种表现…

算法笔记(十)——队列+宽搜

文章目录 N 叉数的层序遍历二叉树的锯齿形层序遍历二叉树最大宽度在每个树行中找最大值 BFS是图上最基础、最重要的搜索算法之一; 每次都尝试访问同一层的节点如果同一层都访问完了,再访问下一层 BFS基本框架 void bfs(起始点) {将起始点放入队列中;标记…

一款基于.NET开发的简易高效的文件转换器

前言 今天大姚给大家分享一款基于.NET开发的免费(GPL-3.0 license)、简易、高效的文件转换器,允许用户通过Windows资源管理器的上下文菜单来转换和压缩一个或多个文件:FileConverter。 使用技术栈 ffmpeg:作为文件转换…

vite学习教程03、vite+vue2打包配置

文章目录 前言一、修改vite.config.js二、配置文件资源/路径提示三、测试打包参考文章资料获取 前言 博主介绍:✌目前全网粉丝3W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&…

Python | Leetcode Python题解之第457题环形数组是否存在循环

题目: 题解: class Solution:def circularArrayLoop(self, nums: List[int]) -> bool:n len(nums)def next(cur: int) -> int:return (cur nums[cur]) % n # 保证返回值在 [0,n) 中for i, num in enumerate(nums):if num 0:continueslow, fas…

Qt中使用QPainter绘制阴影

困扰了很久的问题,今天终于明白了如何绘制QGraphicDropShadowEffect同样效果的阴影,故写下这篇文章分享给大家。其方法是复制Qt源代码中QGraphicDropShadowEffect绘制实现的核心代码然后稍作修改实现,先看效果和封装过后的源代码:…

在 Ubuntu 安装 Python3.7(没有弯路)

注:当前Ubuntu版本为18.04 下载Python源码包 wget https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz安装前准备 安装依赖组件 apt-get updateapt-get install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libs…

c++----多态(初识)

大家好,今天我们来讲讲我们c中的一个关键知识,叫做多态。但是我们学习多态之前必须将我们前面学习过的继承学习过后才能学习。当然大家可能会先想什么叫多态,我们从名字上上看的话就是多种姿态嘛。毕竟看起来这么容易理解,但其实也…

服务器conda环境安装rpy2

参考博客 https://stackoverflow.com/questions/68936589/how-to-select-r-installation-when-using-rpy2-on-conda 现在我遇到这样一个问题,服务器系统环境没有R(没有权限安装),我只能在minconda的conda环境中使用R, 使用方法如下 我现在…

Rocky Linux 9搭建K8s-1.28.0+docker一主多从集群测试环境

集群类型: Kubernetes集群大体上分为两类:一主多从和多主多从 一主多从:一台master节点和多台node节点,搭建简单,但是有单机故障风险,适用于测试环境 多主多从:多台master节点和多台node节点&am…

ELK日志收集之ES的DSL查询语句

一、简介 在Elasticsearch中,我们可以使用Elasticsearch-DSL(Elasticsearch Domain Specific Language)来构建和执行复杂的搜索查询。官方Query DSL指导文档。 叶查询:在特定字段中寻找特定值,例如 match ,term 或 range。 复合查询:具有查询…

【进阶OpenCV】 (5)--指纹验证

文章目录 指纹验证1. 验证原理2. 读取图片3. 计算特征匹配点 总结 指纹验证 指纹验证基于人类指纹的独特性和稳定性。每个人的指纹在图案、断点和交叉点上各不相同,这种唯一性和终生不变性使得指纹成为身份验证的可靠手段。指纹识别技术通过采集和分析指纹图像&…

39 C 语言枚举类型、枚举常量、枚举变量、枚举的遍历、枚举数组、枚举与 switch

目录 1 什么是枚举 2 定义枚举类型 2.1 语法格式 2.2 枚举元素的特点 2.3 案例演示 3 枚举变量 3.1 什么是枚举变量 3.2 定义枚举变量的多种方式 3.3 案例演示 1:标准版枚举类型 3.4 案例演示 2:简化版枚举类型 3.5 案例演示 3:匿…

【教学类-77-01】20241005青花瓷立体书

背景需求: 今天翻到小红书上一个青花瓷立体书 🇭🇰香港免费展览|青花瓷立体纸艺观展册📖 - 小红书 (xiaohongshu.com)https://www.xiaohongshu.com/discovery/item/6426a8fb000000001303653e?app_platformandroid&a…

买卖股票大合集

刷题刷题往死里刷。 121. 买卖股票的最佳时机 链接 121. 买卖股票的最佳时机 思路: 二次做所以有思路了, 从头遍历数组,维持一个最小值,且遇到一个值就计算差值,且维护这个最大值为答案。 class Solution {public …

文心智能体——制作你的专属AI

随着社会的进步和互联网技术的发展,人工智能领域正蓬勃发展。最近几年关于人工智能的新闻日渐增多并且成为了当代最大的热点,所有的领域都在引进AI、训练AI、使用AI,AI正逐步融入人们的生活。从前几年chatGPT大语言模型的横空出世&#xff0c…

【CSDN入门级教程】

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Linux进程调度和进程切换

并行(Parallel) 含义:并行是指多个任务在同一时刻同时执行。 硬件要求:需要多个处理器(如多核CPU)或者多台计算设备来实现,这些执行单元能够真正地同时处理不同的任务。例如,一个具…

vite学习教程05、vite+vue2构建本地 SVG 图标

文章目录 前言一、构建本地SVG图标详细步骤1、安装开发依赖2、配置vite2.1、配置vite.config.js2.2、封装vite引入插件脚本 解决报错:can not find package fast-glob imported 二、实际应用应用1:未封装,直接vue应用应用2:封装vu…

Self-Operating Computer:基于PyAutoGui加AI实现无人“驾驶“电脑,让Python带你走近未来世界

近年来,AI 领域不断取得突破,特别是多模态模型的出现,为计算机无人操控带来了全新的可能性。 想象一下,你的电脑不再需要你手动操作,而是可以像人一样,理解你的指令,并自动执行一系列鼠标键盘操…