网络爬虫——数据清洗与简单处理
·
在数据爬取后,清洗和处理是数据分析的关键步骤。无论是去除冗余数据、格式化日期,还是对字符串进行规范化处理,数据清洗能显著提升后续处理的效率和准确性。本节将详细介绍如何实现 数据去重、格式化 以及 字符串处理与正则表达式的应用,结合实用场景与代码示例,让开发者能够高效处理爬取的数据。
1. 数据去重与数据格式化
1.1 数据去重
1.1.1 去重的必要性
- 在爬取过程中,由于页面重复加载、URL 参数变化等原因,可能会导致重复数据。
- 重复数据不仅浪费存储空间,还会影响分析结果。
1.1.2 常见去重方法
- 基于 Python 集合(set)的去重
集合是天然去重的结构,适用于简单数据类型。 - 基于键值对的去重
对于复杂的字典列表,通过指定唯一标识进行去重。
1.1.3 示例代码
- 简单列表去重
# 简单去重
data = [1, 2, 2, 3, 4, 4, 5]
unique_data = list(set(data))
print(unique_data) # 输出: [1, 2, 3, 4, 5]
- 字典列表去重
# 字典列表去重
data = [
{"id": 1, "name": "张三"},
{"id": 2, "name": "李四"},
{"id": 1, "name": "张三"}
]
# 基于ID去重
unique_data = {item["id"]: item for item in data}.values()
print(list(unique_data))
# 输出: [{'id': 1, 'name': '张三'}, {'id': 2, 'name': '李四'}]
1.2 数据格式化
1.2.1 格式化的意义
- 爬取的数据格式往往不统一(如日期、价格等),格式化有助于标准化数据结构,方便存储和分析。
1.2.2 日期格式化
- 使用 Python 的
datetime模块处理日期和时间。 - 示例代码:
from datetime import datetime
# 原始数据
raw_date = "2024/11/19"
# 格式化为统一格式
formatted_date = datetime.strptime(raw_date, "%Y/%m/%d").strftime("%Y-%m-%d")
print(formatted_date) # 输出: 2024-11-19
1.2.3 数字格式化
- 统一处理爬取的数据中的货币、价格、百分比等。
- 示例代码:
# 价格格式化
raw_price = "$1,234.56"
# 去除符号和逗号,转为浮点数
formatted_price = float(raw_price.replace("$", "").replace(",", ""))
print(formatted_price) # 输出: 1234.56
2. 字符串处理与正则表达式应用
2.1 字符串处理
2.1.1 Python 字符串基础操作
- 去除空白字符
text = " 爬虫数据清洗 "
clean_text = text.strip() # 去除两端空格
print(clean_text) # 输出: 爬虫数据清洗
- 字符串替换
text = "价格:123元"
clean_text = text.replace("价格:", "").replace("元", "")
print(clean_text) # 输出: 123
- 大小写转换
text = "Python Spider"
print(text.lower()) # 输出: python spider
print(text.upper()) # 输出: PYTHON SPIDER
2.2 正则表达式应用
2.2.1 正则表达式简介
- 正则表达式(Regular Expression)是一种模式匹配工具,用于提取、搜索和替换特定格式的字符串。
- Python 提供了
re模块支持正则表达式。
2.2.2 基本操作
- 匹配字符串
import re
text = "Email: example@test.com"
match = re.search(r"\w+@\w+\.\w+", text)
print(match.group()) # 输出: example@test.com
- 提取数字
text = "订单号:12345"
number = re.findall(r"\d+", text)
print(number) # 输出: ['12345']
- 验证数据格式
# 验证邮箱格式
email = "example@test.com"
is_valid = re.match(r"^[\w\.-]+@[\w\.-]+\.\w+$", email)
print(bool(is_valid)) # 输出: True
2.2.3 应用场景
-
清理噪音数据
- 过滤掉 HTML 标签、特殊符号。
- 示例代码:
text = "<p>Hello, <b>World</b>!</p>" clean_text = re.sub(r"<.*?>", "", text) print(clean_text) # 输出: Hello, World!
-
提取链接或关键内容
- 示例代码:
html = '<a href="https://example.com">Example</a>' link = re.search(r'href="(.*?)"', html).group(1) print(link) # 输出: https://example.com
- 示例代码:
2.2.4 正则表达式调试工具
- 推荐使用正则表达式在线调试工具,如 regex101,便于快速测试和优化正则表达式。
3. 数据清洗工具与建议
3.1 推荐工具
- Pandas:支持复杂数据清洗和处理。
- Jupyter Notebook:便于交互式清洗和调试。
3.2 实用建议
- 针对不同场景选用高效工具组合(如 Pandas 和正则表达式结合)。
- 确保清洗后数据格式的一致性和完整性。
- 建立标准化的清洗流程,提升复用性。
总结
数据清洗是网络爬虫的重要环节,直接影响到后续数据分析的准确性和效率。通过数据去重、格式化、字符串处理与正则表达式的高效使用,开发者可以确保数据的规范性和可靠性,为后续数据存储、分析和可视化打下坚实基础。

更多推荐
所有评论(0)