Python 爬虫数据清洗与存储:基础教程

Python 爬虫数据清洗与存储:基础教程

在爬虫数据获取完成后,数据往往是“原始”的,不适合直接使用。清洗和存储是将爬取到的原始数据转化为有用信息的关键步骤。本文将系统地介绍 Python 中进行数据清洗与存储的基本方法,帮助新手理解如何处理爬虫数据,使其更加适合分析和使用。

在这里插入图片描述

1. 数据清洗的意义和作用

数据清洗指的是将爬取到的数据转换为结构化、准确且一致的格式,去除无效数据、处理缺失值、规范化格式、解析数据等。无论是进一步的分析、模型训练还是数据库存储,清洗后的数据都将更加高效和精准。

爬虫获取的数据常见问题:

  • 数据缺失:某些字段可能为空或格式不一致。
  • 噪音数据:可能包含广告、注释等无用信息。
  • 格式不规范:如日期格式、文本的编码、大小写不一致等。

在本文中,我们将使用一些示例代码展示如何进行数据清洗和存储。

2. 常用的数据清洗库

Python 提供了多种库用于数据清洗,其中最常用的有:

  • Pandas:提供了灵活的数据操作功能,可用于数据的清洗、转换和处理。
  • re(正则表达式库):用于字符串模式匹配和数据清理。
  • BeautifulSoup:用于解析 HTML,清洗网页数据。
  • NumPy:用于处理数值数据,补齐缺失值等。

安装 Pandas 和 BeautifulSoup:

pip install pandas beautifulsoup4

3. 示例数据集

假设我们爬取了一个电商网站的商品信息,数据如下:

商品名称价格评论数上架日期
Apple iPhone 12$9992002023年1月1日
Samsung Galaxy S21价格缺失150
Xiaomi Mi 11$699评论缺失2023年3月5日
Sony Xperia 5$7991002023/05/10
OPPO Find X3价格错误502022-12-01

可以看到,爬取的数据包含以下问题:

  • 某些价格和评论数缺失。
  • 日期格式不一致。
  • 某些价格字段格式不正确。
  • “价格缺失”和“评论缺失”这样的非标准信息,需要转化为缺失值。

我们将基于这个数据集来演示清洗步骤。

4. 数据清洗步骤

4.1 将数据载入 Pandas DataFrame

将数据转换为 Pandas 的 DataFrame 格式,便于操作。

import pandas as pd# 创建示例数据
data = {'商品名称': ['Apple iPhone 12', 'Samsung Galaxy S21', 'Xiaomi Mi 11', 'Sony Xperia 5', 'OPPO Find X3'],'价格': ['$999', '价格缺失', '$699', '$799', '价格错误'],'评论数': [200, 150, '评论缺失', 100, 50],'上架日期': ['2023年1月1日', '无', '2023年3月5日', '2023/05/10', '2022-12-01']
}
df = pd.DataFrame(data)
print(df)

输出为:

           商品名称      价格   评论数        上架日期
0  Apple iPhone 12     $999     200     2023年1月1日
1 Samsung Galaxy S21 价格缺失     150            无
2    Xiaomi Mi 11     $699 评论缺失     2023年3月5日
3      Sony Xperia 5   $799     100   2023/05/10
4        OPPO Find X3 价格错误     50    2022-12-01

4.2 处理缺失值

缺失值可以通过删除行或填充方式处理。先将“价格缺失”和“评论缺失”字段转化为 Pandas 可识别的缺失值(NaN)。

import numpy as np# 将“价格缺失”、“评论缺失”转化为 NaN
df['价格'] = df['价格'].replace(['价格缺失', '价格错误'], np.nan)
df['评论数'] = df['评论数'].replace('评论缺失', np.nan)print(df)

4.3 清洗价格字段

价格字段中包含 $ 符号,并且类型为字符串。我们可以去除符号并将其转换为数值类型,以便后续分析。

# 去除 $ 符号并转换为浮点数
df['价格'] = df['价格'].str.replace('$', '').astype(float)
print(df)

4.4 处理日期格式

上架日期包含多种格式。可以使用 pd.to_datetime 函数进行格式统一化。

# 统一上架日期格式
df['上架日期'] = pd.to_datetime(df['上架日期'], errors='coerce')
print(df)

在这里,我们使用 errors='coerce' 选项来处理格式不正确的日期,例如“无”,会将其转换为缺失值。

4.5 填充缺失值

我们可以根据需求填充缺失值,例如将价格的缺失值替换为均值,或填入特定值。

# 用平均价格填充缺失值
df['价格'].fillna(df['价格'].mean(), inplace=True)# 填充评论数为 0
df['评论数'].fillna(0, inplace=True)print(df)

5. 数据存储

完成清洗后,数据可以存储到不同的文件格式中,方便后续分析和使用。常见的数据存储格式包括 CSV、Excel、SQL 数据库和 JSON。

5.1 保存为 CSV 文件

CSV 文件是数据存储的常用格式,适合小规模数据。

df.to_csv('cleaned_data.csv', index=False)

5.2 保存为 Excel 文件

如果数据需要进一步操作或供人查看,Excel 格式是不错的选择。

df.to_excel('cleaned_data.xlsx', index=False)

5.3 保存到 SQL 数据库

SQL 数据库更适合大规模数据,可以使用 SQLite、MySQL 等。以下是使用 SQLite 存储数据的示例:

import sqlite3# 连接 SQLite 数据库(若文件不存在会自动创建)
conn = sqlite3.connect('products.db')
df.to_sql('products', conn, if_exists='replace', index=False)
conn.close()

5.4 保存为 JSON 文件

JSON 文件常用于数据传输和存储,适合嵌套结构的数据。

df.to_json('cleaned_data.json', orient='records', force_ascii=False)

6. 数据清洗与存储的最佳实践

  • 格式统一:尽可能统一字段的格式,方便后续的处理和存储。
  • 处理缺失值:根据具体需求选择合适的填充策略。
  • 保留原始数据:清洗过程中可保留一份原始数据副本,便于溯源。
  • 数据量的选择:小规模数据可以存储为 CSV 或 Excel,大规模数据推荐存储到数据库。
  • 数据验证:清洗和存储后,检查数据的正确性,如统计均值、查看格式是否符合预期。

7. 小结

本文介绍了 Python 爬虫数据的清洗与存储方法,从处理缺失值、统一格式、清洗价格和日期等方面入手,并展示了如何将清洗后的数据保存为多种格式。通过掌握这些数据清洗和存储技巧,可以大幅提升爬虫数据的质量和可用性。

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

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

相关文章

【博主推荐】VUE开发常用技术点收集

文章目录 1.系统主题的全局颜色变量申明和使用2.样式里面导入样式3.页面返回顶部功能4.页面实时更新时间功能5.页面条件判断的几种方式6.页面v-for使用7.页面路由跳转的几种方式8.vue3 js引用的几种方式9.Vue中引用和使用一个组件10.页面传参的几种方式VUE系列前端模板源码其他…

day08(单片机)时钟系统+定时器+PWM

目录 时钟系统定时器PWM 时钟系统 时钟基本概念 时钟源 晶体振荡器(Crystal Oscillator) RC振荡器(Resistor-Capacitor Oscillator) ​​​​​​​STM32U5时钟源 HSI(High Speed Internal) HSE(High Speed External) LSI(Low Spe…

linux盘扩容缩容

这里写目录标题 文件格式介绍问题:当根盘满了过后怎么办?解决方式: Xfs文件格式缩容扩容1. 备份2. 卸载home3. 缩容home(home盘为xfs文件格式)4. 扩容 /5. 恢复home备份 Ext4文件格式缩容扩容1. 备份(可选&…

通过DNS服务器架构解释DNS请求过程

在前面的章节,这里,基于PCAP数据包和RFC文档详细介绍了DNS请求和响应的每个字段的含义。但是在现实的网络世界中,DNS请求和响应的数据包是怎么流动的,会经过哪些设备。本文将着重说明一下目前网络空间中DNS请求和响应的流动过程。 当前网络空间中比较常见DNS请求的流程如下…

【GeoJSON在线编辑平台】(2)吸附+删除+挖孔+扩展

前言 在上一篇的基础上继续开发,补充上吸附功能、删除矢量、挖孔功能。 实现 1. 吸附 参考官方案例:Snap Interaction 2. 删除 通过 removeFeature 直接移除选中的要素。 3. 挖孔 首先是引入 Turf.js ,然后通过 mask 方法来实现挖孔的…

分组校验在Spring中的应用详解

目录 前言1. 什么是分组校验2. 分组校验的基本原理3. 分组校验的实现步骤3.1 定义分组接口3.2 在校验项中指定分组3.3 校验时指定要校验的分组3.4 默认分组和分组的继承 4. 分组校验的优势和适用场景4.1 优势4.2 适用场景 5. 常见问题与解决方案5.1 校验未生效5.2 无法识别默认…

Qt_day3_信号槽

目录 信号槽 1. 概念 2. 函数原型 3. 连接方式 3.1 自带信号 → 自带槽 3.2 自带信号 → 自定义槽 3.3 自定义信号 4. 信号槽传参 5. 对应关系 5.1 一对多 5.2 多对一 信号槽 1. 概念 之前的程序界面只能看,不能交互,信号槽可以让界面进行人机…

Unity引擎智能座舱解决方案

作为全球领先的 3D 引擎之一,Unity引擎为车载3D HMI提供全栈支持。即为从概念设计到量产部署的整个 HMI 工作流程提供创意咨询、性能调优、项目开发等解决方案,从而为车载信息娱乐系统和智能驾驶座舱打造令人惊叹的交互式体验。 专为中国车企打造的HMI引…

<项目代码>YOLOv8 草莓成熟识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

stm32 踩坑笔记

串口问题: 问题:会改变接收缓冲的下一个字节 串口的初始化如下,位长度选择了9位。因为要奇偶校验,要选择9位。但是接收有用数据只用到1个字节。 问题原因: 所以串口接收时会把下一个数据更改

14、NAT和桥接区别

一、NAT模式 NAT相当于是局域网中的局域网,把192.168.21.1当作外网ip,重新划分了一个网关(192.168.33.x) 二、桥接模式 网桥只是把网络桥接起来,还是原来的网关(192.168.21.x),虚拟机…

养老实训室中,智能化养老服务平台的建设价值与措施

一、引言 随着人口老龄化的加速,对养老服务的需求日益攀升,传统的养老模式已无法满足现代社会的需求。智能化养老服务平台作为一种新兴的养老模式,以其高效、便捷和个性化的服务特点,开始受到社会的广泛关注。本文将深入探讨智能…

Linux:基本开发工具

一:编辑器vim 1.1vim的基本概念 vim其实有多重模式,这里我们主要了解vim的三种模式,分别是命令模式(command mode),插入模式(Insert mode)和底行模式(lst line mode) 正常/普通/命令模式(Normal mode) …

【数据分析】如何构建指标体系?

有哪些指标体系搭建模型?五个步骤教你从0开始搭建指标体系 一、企业指标体系搭建存在什么问题 许多企业在搭建数据指标体系时遇到了诸多难题,如问题定位不准确、数据采集不完整、目标不一致、报表无序、指标覆盖不全面以及报表价值未充分利用等。 1、…

ANDROIDWORLD: A Dynamic Benchmarking Environment for Autonomous Agents论文学习

这个任务是基于androidenv的。这个环境之前学过,是一个用来进行强化学习的线上环境。而这篇文章的工作就是要给一些任务加上中间的奖励信号。这种训练环境的优点就是动态,与静态的数据集(比如说我自己的工作)不同,因此…

【Android】轮播图——Banner

引言 Banner轮播图是一种在网页和移动应用界面设计中常见的元素,主要用于在一个固定的区域内自动或手动切换一系列图片,以展示不同的内容或信息。这个控件在软件当中经常看到,商品促销、热门歌单、头像新闻等等。它不同于ViewPgaer在于无需手…

容器化技术入门:Docker详解

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 容器化技术入门:Docker详解 容器化技术入门:Docker详解 容器化技术入门:Docker详解 引言 Doc…

AssertionError: weight model.layers.0.self_attn.q_proj.weight does not exist

通义千问2.5-7B-Instruct-AWQ量化,但在npu上运行报上面错误,奇怪?: Exception:weight model.layers.0.self_attn.q_proj.weight does not exist AssertionError: weight model.layers.0.self_attn.q_proj.weight does not exist https://…

【SSL-RL】自监督强化学习:随机潜在演员评论家 (SLAC)算法

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…

怎么启动python脚本文件

创建一个简单的python入门代码,以便示范。 存储文件并复制该python文件的存储路径。 使用cd 命令切换工作目录到python文件所在的目录。 输入变量环境中的python路径和python文件的名字。 回车执行后,可完成命令行的python文件运行。