Python爬虫数据清洗实战:从杂乱无章到整洁可用

小伙伴们,做爬虫最头疼的不是抓数据,而是抓回来那一堆乱七八糟的内容!价格里混着符号、日期格式千奇百怪、还有重复和缺失的值,看着就头大。别慌,咱们用Python几招就能搞定。Pandas处理表格数据是真香,正则表达式专门治各种不服,再加上BeautifulSoup清标签,保准让原始数据改头换面!

在Python爬虫项目中,数据清洗是确保数据质量的关键步骤。以下是系统化的方法和常用工具,帮助你高效完成数据清洗:

一、数据清洗常见问题及应对策略

1、重复数据

ini 复制代码
import pandas as pd
df = pd.DataFrame(data_list)
df.drop_duplicates(subset=['url'], keep='first', inplace=True)  # 根据URL去重

2、缺失值处理

ini 复制代码
df.dropna(subset=['price'])  # 删除关键字段缺失的行
df['price'].fillna(0, inplace=True)  # 数值型填充0
df['desc'].fillna('未知', inplace=True)  # 文本型填充默认值

3、格式标准化

  • 日期格式化

    bash 复制代码
    from datetime import datetime
    df['date'] = pd.to_datetime(df['raw_date']).dt.strftime('%Y-%m-%d')
  • 文本去除空格

    scss 复制代码
    df['title'] = df['title'].str.strip()

4、异常值处理

ini 复制代码
# 删除价格超过10000的异常值
df = df[df['price'] < 10000]
# 使用分位数过滤
q_low = df['price'].quantile(0.01)
q_hi  = df['price'].quantile(0.99)
df = df[(df['price'] > q_low) & (df['price'] < q_hi)]

5、HTML标签清理

python 复制代码
from bs4 import BeautifulSoup
def remove_html(text):
    return BeautifulSoup(text, "html.parser").get_text() if text else ""
​
df['desc'] = df['desc'].apply(remove_html)

二、专用数据清洗工具库

1、Pandas(结构化数据)

bash 复制代码
# 类型转换
df['price'] = pd.to_numeric(df['price'], errors='coerce')
​
# 字符串处理
df['name'] = df['name'].str.lower().str.replace('[^\w\s]', '', regex=True)

2、Re(正则表达式)

python 复制代码
import re
# 提取文本中的数字
df['phone'] = df['raw_text'].str.extract(r'(\d{3}-\d{8})')

3、自定义函数处理复杂场景

python 复制代码
def clean_price(price_str):
    if isinstance(price_str, str):
        return re.sub(r'[^\d.]', '', price_str)  # 去除货币符号等
    return price_str

df['price'] = df['price'].apply(clean_price).astype(float)

三、完整数据清洗流程示例

以爬取的电商商品数据为例:

python 复制代码
import pandas as pd
import re

def clean_data(raw_data):
    # 1. 转DataFrame
    df = pd.DataFrame(raw_data)
    
    # 2. 去重
    df = df.drop_duplicates(subset=['product_id'])
    
    # 3. 处理价格
    df['price'] = (df['price'].str.replace('¥', '')
                    .str.replace(',', '')
                    .astype(float))
    df = df[df['price'] > 0]  # 过滤无效价格
    
    # 4. 处理日期
    df['release_date'] = pd.to_datetime(df['release_date'], errors='coerce')
    df = df[df['release_date'].notna()]
    
    # 5. 清理描述文本
    df['description'] = (df['description'].str.strip()
                         .str.replace('\n', ' ')
                         .str.replace(r'\s+', ' ', regex=True))
    
    return df.to_dict('records')

# 应用清洗函数
cleaned_data = clean_data(scraped_data)

四、最佳实践建议

1、逐层清洗:先处理缺失值,再格式化,最后处理逻辑异常

2、保留原始数据:始终保留未经修改的原始数据,便于回溯

3、单元测试:对清洗函数编写测试用例,验证边界情况

4、日志记录:记录被清洗掉的数据数量和原因

python 复制代码
print(f"原始数据量: {len(raw_data)}")
print(f"清洗后数据量: {len(cleaned_data)}")
print(f"删除重复值: {len(raw_data) - len(cleaned_data)}")

五、常用工具包推荐

  • Pandas:主流数据处理库
  • NumPy:数值计算支持
  • Re:正则表达式处理
  • BeautifulSoup:HTML/XML解析
  • Pyjanitor:提供链式方法调用(类似R语言的dplyr)

通过结合这些方法和工具,你可以构建健壮的数据清洗流程,确保爬虫数据可直接用于分析或入库。

搞定数据清洗后,你会发现自己爬的数据顿时清爽多了!记得清洗时要保留原始数据备份,每步操作都记好日志。整理干净的数据不管是存数据库还是做分析都特别省心,整个项目档次都提升了。其实熟练了之后,这些清洗流程就会变成肌肉记忆,赶紧动手试试吧!

相关推荐
人大博士的交易之路1 小时前
今日行情明日机会——20250926
数学建模·数据分析·缠论·缠中说禅·涨停回马枪
大数据CLUB1 小时前
基于hive和mapreduce的地铁数据分析及可视化_hive作为数据库
大数据·hive·hadoop·分布式·数据分析·mapreduce
泰迪智能科技6 小时前
分享“泰迪杯”数据挖掘挑战赛全新升级——赛题精准对标,搭建 “白名单” 赛事进阶通道
人工智能·数学建模·数据挖掘
67X6 小时前
数据仓库与数据挖掘课程设计
数据仓库·数据挖掘
max50060013 小时前
基于Meta Llama的二语习得学习者行为预测计算模型
人工智能·算法·机器学习·分类·数据挖掘·llama
计算机编程小央姐13 小时前
【Spark+Hive+hadoop】基于spark+hadoop基于大数据的人口普查收入数据分析与可视化系统
大数据·hadoop·数据挖掘·数据分析·spark·课程设计
nju_spy16 小时前
南京大学 - 复杂结构数据挖掘(一)
大数据·人工智能·机器学习·数据挖掘·数据清洗·南京大学·相似性分析
没有梦想的咸鱼185-1037-166317 小时前
【遥感技术】从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类
pytorch·python·深度学习·机器学习·数据分析·cnn·transformer
RE-190117 小时前
制冷剂中表压对应温度值的获取(Selenium)
爬虫·python·selenium·jupyter·pandas·danfoss·reftools
周杰伦_Jay19 小时前
【图文详解】强化学习核心框架、数学基础、分类、应用场景
人工智能·科技·算法·机器学习·计算机视觉·分类·数据挖掘