小伙伴們,做爬蟲最頭疼的不是抓數據,而是抓回來那一堆亂七八糟的內容!價格里混著符號、日期格式千奇百怪、還有重復和缺失的值,看著就頭大。別慌,咱們用Python幾招就能搞定。Pandas處理表格數據是真香,正則表達式專門治各種不服,再加上BeautifulSoup清標簽,保準讓原始數據改頭換面!
在Python爬蟲項目中,數據清洗是確保數據質量的關鍵步驟。以下是系統化的方法和常用工具,幫助你高效完成數據清洗:
一、數據清洗常見問題及應對策略
1、重復數據
import pandas as pd
df = pd.DataFrame(data_list)
df.drop_duplicates(subset=['url'], keep='first', inplace=True) # 根據URL去重
2、缺失值處理
df.dropna(subset=['price']) # 刪除關鍵字段缺失的行
df['price'].fillna(0, inplace=True) # 數值型填充0
df['desc'].fillna('未知', inplace=True) # 文本型填充默認值
3、格式標準化
-
日期格式化:
from datetime import datetime df['date'] = pd.to_datetime(df['raw_date']).dt.strftime('%Y-%m-%d')
-
文本去除空格:
df['title'] = df['title'].str.strip()
4、異常值處理
# 刪除價格超過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標簽清理
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(結構化數據)
# 類型轉換
df['price'] = pd.to_numeric(df['price'], errors='coerce')# 字符串處理
df['name'] = df['name'].str.lower().str.replace('[^\w\s]', '', regex=True)
2、Re(正則表達式)
import re
# 提取文本中的數字
df['phone'] = df['raw_text'].str.extract(r'(\d{3}-\d{8})')
3、自定義函數處理復雜場景
def clean_price(price_str):if isinstance(price_str, str):return re.sub(r'[^\d.]', '', price_str) # 去除貨幣符號等return price_strdf['price'] = df['price'].apply(clean_price).astype(float)
三、完整數據清洗流程示例
以爬取的電商商品數據為例:
import pandas as pd
import redef clean_data(raw_data):# 1. 轉DataFramedf = 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、日志記錄:記錄被清洗掉的數據數量和原因
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)
通過結合這些方法和工具,你可以構建健壯的數據清洗流程,確保爬蟲數據可直接用于分析或入庫。
搞定數據清洗后,你會發現自己爬的數據頓時清爽多了!記得清洗時要保留原始數據備份,每步操作都記好日志。整理干凈的數據不管是存數據庫還是做分析都特別省心,整個項目檔次都提升了。其實熟練了之后,這些清洗流程就會變成肌肉記憶,趕緊動手試試吧!