当前位置: 首页 > news >正文

【Python爬虫实战】从文件到数据库:全面掌握Python爬虫数据存储技巧

  🌈个人主页:https://blog.csdn.net/2401_86688088?type=blog
🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html

目录

前言

一、文本文件数据存储的基础

二、如何将爬取的数据存储为.txt文件

三、如何将数据存储为.csv文件

四、如何将数据存储为.json文件

五、如何选择合适的存储格式

六、MySQL存储

(一)环境准备

(二)连接MySQL数据库

(三)创建数据库和表

(四)插入数据到MySQL

(五)查询数据

(六)更新和删除数据

(七)断开连接

(八)MySQL存储总结

七、MongoDB存储

(一)安装MongoDB和Python库

(二)连接MongoDB数据库

(三)创建集合

(四)插入数据

(五)查询数据

(六)更新数据

(七)删除数据

(八)断开连接

(九)MongoDB存储总结

八、总结


前言

在数据驱动的时代,爬虫技术已经成为获取和收集网络数据的重要工具。然而,仅仅获取数据还不够,如何高效、合理地存储这些数据,才能让其真正发挥价值。Python提供了多种数据存储方式,包括简单的文本文件(如.txt.csv.json),以及高级数据库(如MySQL和MongoDB)。本篇文章将深入剖析如何将爬取的数据灵活存储于不同格式和数据库中,帮助你选择最适合自己项目的存储方式。

本文将通过详细的代码示例,逐步讲解如何将数据存储在不同格式的文件中,以及如何将数据存入MySQL和MongoDB数据库中,以满足不同类型爬虫项目的需求。无论你是初学者还是开发者,相信你都会从本文中找到适合你的解决方案。


一、文本文件数据存储的基础

Python中常见的文本文件格式包括:

  • .txt:纯文本文件,适合存储不需要特定格式的内容。

  • .csv:逗号分隔文件,适合存储表格化数据。

  • .json:JavaScript Object Notation格式,适合存储结构化数据(如字典、列表)。


二、如何将爬取的数据存储为.txt文件

示例:

# 保存为 .txt 文件
data = "这是从网站爬取的内容"# 写入文本文件
with open("data.txt", "w", encoding="utf-8") as f:f.write(data)
print("数据已保存到 data.txt")

注意事项:

  1. 编码问题:爬取的中文或其他特殊字符内容需要指定encoding="utf-8",避免乱码。

  2. 覆盖写入:使用"w"模式会覆盖原有内容,如需追加内容,可以用"a"模式。


三、如何将数据存储为.csv文件

示例:

import csv# 模拟爬取的表格数据
data = [["标题", "链接", "日期"],["Python教程", "https://example.com", "2024-10-19"],["爬虫入门", "https://example2.com", "2024-10-18"]
]# 写入CSV文件
with open("data.csv", "w", newline="", encoding="utf-8") as f:writer = csv.writer(f)writer.writerows(data)
print("数据已保存到 data.csv")

注意事项:

  1. 表格数据格式csv文件需要结构化数据,如列表或元组。

  2. newline="":防止在Windows下写入多余的空行。


四、如何将数据存储为.json文件

示例:

import json# 模拟爬取的数据
data = {"标题": "Python爬虫教程","链接": "https://example.com","日期": "2024-10-19"
}# 写入JSON文件
with open("data.json", "w", encoding="utf-8") as f:json.dump(data, f, ensure_ascii=False, indent=4)
print("数据已保存到 data.json")

注意事项:

  1. ensure_ascii=False:避免中文字符在保存时被转义成Unicode编码。

  2. indent=4:使生成的JSON文件格式化,易于阅读。


五、如何选择合适的存储格式

  • .txt文件:适合存储非结构化的文本数据,如文章内容、日志等。

  • .csv文件:适合存储二维表格数据,如新闻标题和日期等。

  • .json文件:适合存储层次化结构数据,如字典列表。


六、MySQL存储

使用MySQL来存储爬取的数据是非常常见且有效的做法,尤其适合管理和查询大量结构化数据。下面,我会详细介绍如何将爬取的数据存入MySQL数据库,包括准备环境、数据库连接、创建表、插入数据等关键步骤。

(一)环境准备

1.安装MySQL

  • Windows / Mac:可以从MySQL官网下载并安装。

  • Linux:使用aptyum安装,例如:

sudo apt update
sudo apt install mysql-server

2.安装Python的MySQL库

推荐使用mysql-connector-pythonpymysql库。安装命令:

pip install mysql-connector-python

pip install pymysql

(二)连接MySQL数据库

示例:

import mysql.connector# 连接到MySQL数据库
db = mysql.connector.connect(host="localhost",  # 数据库地址user="your_username",  # 用户名password="your_password",  # 密码database="your_database"  # 数据库名称
)print("连接成功")
cursor = db.cursor()

注意事项:

  1. MySQL服务需要启动。可以通过sudo service mysql start(Linux)或手动启动(Windows)。

  2. 检查用户权限,确保该用户有权限操作对应的数据库。

(三)创建数据库和表

创建数据库:

cursor.execute("CREATE DATABASE IF NOT EXISTS your_database")
print("数据库创建成功")

创建表结构:

# 创建一个用于存储爬取数据的表
cursor.execute("""CREATE TABLE IF NOT EXISTS web_data (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255),url VARCHAR(255),date DATE)
""")
print("表创建成功")

(四)插入数据到MySQL

示例:

# 模拟爬取的数据
data = [("Python教程", "https://example.com", "2024-10-19"),("爬虫入门", "https://example2.com", "2024-10-18")
]# 插入数据的SQL语句
insert_query = "INSERT INTO web_data (title, url, date) VALUES (%s, %s, %s)"# 执行批量插入
cursor.executemany(insert_query, data)
db.commit()  # 提交事务
print(f"成功插入{cursor.rowcount}条数据")

注意事项:

  1. 事务提交:通过db.commit()确保数据插入成功。

  2. 批量插入:使用executemany()可以高效插入多条数据。

(五)查询数据

示例:

# 查询所有数据
cursor.execute("SELECT * FROM web_data")
results = cursor.fetchall()# 输出查询结果
for row in results:print(row)

结果:

(1, 'Python教程', 'https://example.com', datetime.date(2024, 10, 19))
(2, '爬虫入门', 'https://example2.com', datetime.date(2024, 10, 18))

(六)更新和删除数据

更新数据:

update_query = "UPDATE web_data SET title = %s WHERE id = %s"
cursor.execute(update_query, ("Python进阶教程", 1))
db.commit()
print("数据更新成功")

删除数据:

delete_query = "DELETE FROM web_data WHERE id = %s"
cursor.execute(delete_query, (2,))
db.commit()
print("数据删除成功")

(七)断开连接

示例:

# 关闭游标和数据库连接
cursor.close()
db.close()
print("数据库连接已关闭")

(八)MySQL存储总结

将爬取的数据存储在MySQL中具有以下优点:

  1. 高效查询:通过SQL语句可以快速查找和过滤数据。

  2. 数据管理:支持更新、删除数据,更适合大规模爬取项目。

  3. 结构化存储:非常适合存储结构化的数据,如文章标题和链接。


七、MongoDB存储

使用 MongoDB 存储爬取数据是非常合适的选择,尤其是当数据结构复杂或需要灵活存储时。MongoDB是一个 NoSQL 数据库,适合存储 JSON 格式的文档数据。接下来,我会详细介绍如何将爬取的数据存储在 MongoDB 中,包括安装、连接、存储、查询等操作。

(一)安装MongoDB和Python库

1.安装MongoDB

  • Windows / Mac:从 MongoDB官网 下载并安装。

  • Linux:使用以下命令安装:

sudo apt update
sudo apt install -y mongodb
sudo systemctl start mongodb  # 启动MongoDB服务

2.安装Python库pymongo

MongoDB的Python客户端为pymongo。你可以通过以下命令安装:

pip install pymongo

(二)连接MongoDB数据库

示例:

from pymongo import MongoClient# 连接到MongoDB服务
client = MongoClient("mongodb://localhost:27017/")# 选择数据库(如果不存在会自动创建)
db = client["web_scraping"]print("连接成功")

(三)创建集合

在MongoDB中,数据存储在集合中,类似于关系型数据库中的表。集合会在插入数据时自动创建。

# 创建或选择集合(类似于SQL中的表)
collection = db["web_data"]

(四)插入数据

MongoDB的文档格式与JSON相同,非常适合存储嵌套数据结构。

1.插入单条数据

data = {"title": "Python爬虫教程","url": "https://example.com","date": "2024-10-19"
}# 插入数据
collection.insert_one(data)
print("单条数据插入成功")

2.插入多条数据

data_list = [{"title": "Python入门", "url": "https://example1.com", "date": "2024-10-18"},{"title": "高级爬虫", "url": "https://example2.com", "date": "2024-10-17"}
]# 批量插入数据
collection.insert_many(data_list)
print("多条数据插入成功")

(五)查询数据

1.查询所有数据

# 查询集合中的所有数据
results = collection.find()# 输出查询结果
for result in results:print(result)

结果:

{'_id': ObjectId('...'), 'title': 'Python入门', 'url': 'https://example1.com', 'date': '2024-10-18'}
{'_id': ObjectId('...'), 'title': '高级爬虫', 'url': 'https://example2.com', 'date': '2024-10-17'}

2.条件查询

# 查询特定条件的数据
result = collection.find_one({"title": "Python入门"})
print(result)

(六)更新数据

示例:

# 更新特定文档的数据
collection.update_one({"title": "Python入门"},  # 查询条件{"$set": {"title": "Python入门教程"}}  # 更新内容
)
print("数据更新成功")

(七)删除数据

示例:

# 删除单条数据
collection.delete_one({"title": "高级爬虫"})
print("单条数据删除成功")# 删除多条数据
collection.delete_many({"date": {"$lt": "2024-10-18"}})
print("多条数据删除成功")

(八)断开连接

# 关闭数据库连接
client.close()
print("数据库连接已关闭")

(九)MongoDB存储总结

使用MongoDB存储爬取数据的优点:

  1. 灵活的数据结构:无需预定义表结构,适合存储复杂的嵌套数据。

  2. 高效的读写性能:支持大规模数据的高效存储和查询。

  3. JSON格式支持:爬取的数据通常以JSON格式存储,直接适配MongoDB。


八、总结

数据存储的方式和格式对于爬虫项目的效率和效果至关重要。本篇文章系统地介绍了Python爬虫数据的存储方式,涵盖了从基础的TXT、CSV和JSON格式到高级的MySQL和MongoDB数据库。

  • 简单数据存储:
    使用TXT文件存储纯文本内容,适合日志或简单记录。CSV文件非常适合存储表格数据,方便后续数据分析和展示。而JSON格式更适合存储复杂、嵌套的结构化数据。

  • 高级数据存储:
    对于需要频繁查询和更新的数据,MySQL提供了稳定的关系型存储支持。而MongoDB由于其灵活的JSON格式支持,非常适合处理非结构化数据,尤其是在数据结构不固定的情况下。

通过这些不同存储方式的掌握,你可以根据项目需求选择合适的存储方案,为数据处理和分析奠定坚实基础。希望这篇文章能够帮助你在数据存储方面更上一层楼,为你的爬虫项目注入新活力。

相关文章:

【Python爬虫实战】从文件到数据库:全面掌握Python爬虫数据存储技巧

🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、文本文件数据存储的基础 二、如何将爬取的数据存储为.txt文件 三、如何…...

断其一指,无惧!ProFusion3D: 相机或者激光失效仍高效的多传感器融合3D目标检测算法

Abstract 多传感器融合在自动驾驶中的3D目标检测中至关重要,摄像头和激光雷达是最常用的传感器。然而,现有方法通常通过将两种模态的特征投影到鸟瞰视角(BEV)或透视视角(PV)来进行单视角的传感器融合&…...

CCS字体、字号更改+CCS下载官方链接

Step1、 按照图示箭头操作 step2 Step3 点击确定,点击Apply(应用),点击Apply and close(应用和关闭) 4、历代版本下载链接 CCS下载:官方链接https://www.ti.com/tool/CCSTUDIO The last but not least 如果成功的解决了你的问题&#x…...

YOLO11改进|注意力机制篇|引入SEAM注意力机制

目录 一、【SEAM】注意力机制1.1【SEAM】注意力介绍1.2【SEAM】核心代码二、添加【SEAM】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4三、yaml文件与运行3.1yaml文件3.2运行成功截图一、【SEAM】注意力机制 1.1【SEAM】注意力介绍 下图是【SEAM】的结构图,让我们简单分析一下…...

简历修订与求职经历 - Chap04

节后第一周有点山中无甲子的状况。Oct08,节后第一天几乎全天处于心流状态。上午下午很快时间就结束了。 周五,按照既有的面试频次,感觉可以做点别的。然后就联系了附近的驾校,打算把摩托车驾驶证拿了。然后几乎到了驾校&#xff…...

鸿蒙开发案例:推箱子

推箱子游戏(Sokoban)的实现。游戏由多个单元格组成,每个单元格可以是透明的、墙或可移动的区域。游戏使用Cell类定义单元格的状态,如类型(透明、墙、可移动区域)、圆角大小及坐标偏移。而MyPosition类则用于…...

mysql--表的约束

目录 理解表的约束和操作 如何理解? 1、空属性null 2、默认值default 3、列描述comment 4、自动填充zorefill 5、主键primary key (1)创建表时指定可以 (2)创建表后指定key (3)删除主…...

Ubuntu 上安装 docker 并配置 Docker Compose 详细步骤

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…...

MySQL去除空白字符(如非标准空格、制表符等)

在 MySQL 中,需要去除 site_name 字段的空格,可以使用 TRIM() 函数。这个函数可以去掉字符串开头和结尾的空格。以下是一个示例查询,演示如何选择去除空格后的 site_name: SELECT TRIM(site_name) AS site_name FROM site_info;如…...

2063:【例1.4】牛吃牧草

【题目描述】 有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供15头牛吃20天,或可供20头牛吃10天,那么,这片牧场每天新生的草量可供几头牛吃1天? 【输入】 (无) 【输出】 如题…...

QT开发:深入掌握 QtGui 和 QtWidgets 布局管理:QVBoxLayout、QHBoxLayout 和 QGridLayout 的高级应用

目录 引言 1. QVBoxLayout:垂直布局管理器 基本功能 创建 QVBoxLayout 添加控件 添加控件和设置对齐方式 设置对齐方式 示例代码与详解 2. QHBoxLayout:水平布局管理器 基本功能 创建 QHBoxLayout 添加控件 添加控件和设置对齐方式 设置对齐…...

Bootstrapping、Bagging 和 Boosting

bagging方法如下: bagging和boosting比较...

板块龙头公司

高通 高通(Qualcomm)是一家总部位于美国加利福尼亚州的全球领先半导体和电信设备公司。成立于1985年,高通专注于无线通信技术的研发和创新。 移动处理器: 高通开发的骁龙(Snapdragon)系列芯片广泛用于智能手机和平板电…...

Java项目-基于Springboot的招生管理系统项目(源码+说明).zip

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...

使用 MongoDB 构建 AI:利用实时客户数据优化产品生命周期

在《使用 MongoDB 构建 AI》系列博文中,我们看到越来越多的企业正在利用 AI 技术优化产品研发和用户支持流程。例如,我们介绍了以下案例: Ventecon 的 AI 助手帮助产品经理生成和优化新产品规范 Cognigy 的对话式 AI 帮助企业使用任意语言&a…...

【React】React18核心源码解读

前言 本文使用 React18.2.0 的源码,如果想回退到某一版本执行git checkout tags/v18.2.0即可。如果打开源码发现js文件报ts类型错误请看本人另一篇文章:VsCode查看React源码全是类型报错如何解决。 阅读源码的过程: 下载源码 观察 package…...

部署私有仓库以及docker web ui应用

官方地址:https://hub.docker.com/_/registry/tags 一、拉取registry私有仓库镜像 docker pull registry:latest 二、运⾏容器 docker run -itd -v /home/dockerdata/registry:/var/lib/registry --name "pri_registry1" --restartalways -p 5000:5000 …...

DAY57WEB 攻防-SSRF 服务端请求Gopher 伪协议无回显利用黑白盒挖掘业务功能点

知识点: 1、SSRF-原理-外部资源加载 2、SSRF-利用-伪协议&无回显 3、SSRF-挖掘-业务功能&URL参数 SSRF-原理&挖掘&利用&修复 漏洞原理:SSRF(Server-Side Request Forgery:服务器端请求伪造) ,一种由攻击者构造形成由服务…...

光盘刻录大文件时分卷操作

可以使用 split 命令来将大文件 finetune.tar 分卷为适合光盘大小的文件片段,然后在离线服务器上合并这些分卷文件。以下是具体的操作步骤: 步骤1:分卷文件 假设你的文件 finetune.tar 大小为35GB,并且你想分卷为每个4.7GB&…...

Kafka系列之:生产者性能调优

Kafka系列之:生产者性能调优 一、producer.type二、request.required.acks三、max.request.size四、batch.size五、buffer.memory一、producer.type 在Kafka中,producer.type是一个配置属性,用于指定Producer的类型。它有两个可能的值: sync:同步发送模式。当设置为sync时…...

【linux】进程创建与进程终止

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;linux笔记仓 目录 01.进程创建02.进程终止异常终止如何终止exit()_exit() 01.进程创建 #include <unistd.h> pid_t fork(void);返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进…...

QT的文件操作类 QFile

QFile 是 Qt 框架中用于文件处理的一个类。它提供了读取和写入文件的功能&#xff0c;支持文本和二进制文 件。 QFile 继承自 QIODevice &#xff0c;因此它可以像其他IO设备一样使用。 主要功能 文件读写&#xff1a; QFile 支持打开文件进行读取或写入操作文件信息&#x…...

java项目篇-用户脱敏展示

用户敏感信息脱敏展示 定义手机号和证件号的 Jackson 自定义序列化器&#xff0c;并在对应需要脱敏的敏感字段上指定自定义序列化器。在进行指定的需要脱敏的字段&#xff08;身份证号&#xff0c;手机号&#xff0c;银行卡号等&#xff09;序列化的时候&#xff0c;该字段自动…...

《C++计算引擎:驱动高效计算的强大动力》

在当今数字化时代&#xff0c;高效的计算能力是推动科技进步和创新的关键。而 C作为一种强大的编程语言&#xff0c;在构建高性能计算引擎方面发挥着重要作用。本文将深入探讨 C计算引擎的特点、优势以及在不同领域的应用&#xff0c;带您领略 C在计算领域的独特魅力。 一、C计…...

Linux的hadoop集群部署

1.hadoop是一个分布式系统基础架构,主要解决海量数据额度存储与海量数据的分析计算问题 hdfs提供存储能力,yarn提供资源管理能力,MapReduce提供计算能力 2.安装 一:调整虚拟机内存,4G即可 二:下载安装包 网址:https://mirrors.aliyun.com/apache/hadoop/common/hadoop-3.4.0/…...

请问:ESModule 与 CommonJS 的异同点是什么?

前言 本篇文章不会介绍模块的详细用法&#xff0c;因为核心是重新认识和理解模块的本质内容是什么&#xff0c;直奔主题&#xff0c;下面先给出最后结论&#xff0c;接下来在逐个进行分析。 ECMAScript Module 和 CommonJS 的相同点&#xff1a; 都拥有自己的缓存机制&#…...

【数据结构与算法】力扣 59. 螺旋矩阵 II

题目描述 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a; n 3 输出&#xff1a; [[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输入&#xff1a…...

HarmonyOS Next模拟器异常问题及解决方法

1、问题1&#xff1a;Failed to get the device apiVersion. 解决方法&#xff1a;关闭模拟器清除用户数据重启...

求最大公约数(c语言)

先看题&#x1f447; 我这里介绍的方法&#xff1a;辗转相除法&#xff1a; 最大公约数&#xff1a; 最大公约数是指同时能整除俩个或更多整数的最大正整数。 欧几里得算法就是求最大公约数的算法 求最大公约数涉及到一个数学原理的转换: 俩个数的最大公约数等于其中一个数和…...

Android Camera2在textureView中的预览和拍照

Camera2预览和拍照 1、Camera2相机模型2、Camera2的重要类3、Camera2调用流程4、Camera2调用实现 1)定义TextureView作为预览界面2)设置相机参数3)开启相机4)开启相机预览5)实现PreviewCallback6)拍照 1、Camera2相机模型 解释上诉示意图&#xff0c;假如想要同时拍摄两张不同…...