当前位置: 首页 > 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时…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...