Python爬蟲數據清洗實戰:從雜亂無章到整潔可用

小伙伴們,做爬蟲最頭疼的不是抓數據,而是抓回來那一堆亂七八糟的內容!價格里混著符號、日期格式千奇百怪、還有重復和缺失的值,看著就頭大。別慌,咱們用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)

通過結合這些方法和工具,你可以構建健壯的數據清洗流程,確保爬蟲數據可直接用于分析或入庫。

搞定數據清洗后,你會發現自己爬的數據頓時清爽多了!記得清洗時要保留原始數據備份,每步操作都記好日志。整理干凈的數據不管是存數據庫還是做分析都特別省心,整個項目檔次都提升了。其實熟練了之后,這些清洗流程就會變成肌肉記憶,趕緊動手試試吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98232.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98232.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98232.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

打工人日報#20250906

打工人日報#20250906 周六了&#xff01; 今天出門讀者特別痛&#xff0c;本來都想爽約了&#xff0c;不過忍下來了了&#xff0c;現在看來很值得&#xff01; 不過還是要好好吃早餐、和熱水&#xff01; 閱讀 《小米創業思考》 第一章 奇跡時代 看完了 就是快呀 好的產品 好的…

小型磨床設計cad+三維圖+設計說明書

摘 要 隨著現代加工技術的發展&#xff0c;各種各樣的加工技術得到了廣泛的應用&#xff0c;磨床在機械制造領域得到了廣泛的應用&#xff0c;本文經過查閱相關文獻&#xff0c;完成了一種小型磨床的結構設計。 本文設計的小型磨床其主要是由三部分組成的&#xff0c;第一部分…

音響皇帝BO,牽手全球第一AR眼鏡雷鳥,耳機黨坐不住了?

【潮汐商業評論/原創】自AI大模型技術實現突破以來&#xff0c;即引發一場終端革命&#xff0c;關于下一個智能終端入口&#xff0c;或者說關于下一代計算平臺&#xff0c;市場有過很多“狼來了”的聲音&#xff0c;大家紛紛猜測&#xff0c;在智能手機之后&#xff0c;究竟誰有…

中斷和異常

中斷和異常簡介 在計算機體系結構和操作系統中&#xff0c;中斷&#xff08;Interrupt&#xff09; 和 異常&#xff08;Exception&#xff09; 是CPU應對突發事件、實現多任務并發和錯誤處理的核心機制。二者均通過暫停當前任務、轉去執行特定處理程序來響應事件&#xff0c;但…

Fab資源快速導入UE

有時候在Epic啟動器導入進度會卡住可以直接使用ue內置Fab來導入資源 這樣是百分百能導入的

Python錯誤測試與調試——文檔測試

Doctest 通過解析文檔字符串&#xff08;docstring&#xff09;中的交互式 Python 代碼片段&#xff08;以 >>>開頭&#xff09;進行測試&#xff0c;驗證代碼輸出是否與預期一致。測試用例直接嵌入代碼中&#xff0c;實現“文檔即測試”核心語法&#xff1a;def func…

c#核心筆記

111&#xff0c;面向對象 1&#xff0c;面向過程編程&#xff1a;是一種以過程為中心的編程思想分析出解決問題所需要的步驟然后用函數把步驟一步一步實現使用的時候&#xff0c;一個一個依次調用。 2&#xff0c;面向對象編程&#xff1a;面向對象是一種對現實世界理解和抽象的…

【MySQL】從零開始了解數據庫開發 --- 初步認識數據庫

永遠記住&#xff0c;你的存在是有意義的&#xff0c; 你很重要&#xff0c; 你是被愛著的&#xff0c; 而且你為這個世界帶來了無可取代的東西。 -- 麥克西 《男孩、鼴鼠、狐貍和馬》-- 從零開始了解數據庫開發安裝MySQL什么是數據庫常見主流數據庫初步了解SQL語句存儲引擎安裝…

Altium Designer(AD24)切換工作界面為淺灰色的方法

??《專欄目錄》 目錄 1,概述 2,界面介紹 1,概述 本文演示AD24軟件黑色界面切換為淺灰色的方法。 2,界面介紹 第1步:點擊設置小圖標,然后點擊View 第2步:在UI Theme,點擊Current旁邊的Altium Dark Gtay ,在下拉選項中選擇Altium Light Gtay,然后點擊OK確認 第4步…

SDRAM詳細分析—07 存儲器陣列尋址

大家好,這里是大話硬件 這篇文章將分析實際SDRAM內部是如何進行尋址以及內存單元分布方式。 根據前面的內容,從小容量到大容量進行迭代分析。 1. 1bit容量 這個存儲單元只能存儲1個bit位。假設現在需要8bit內存容量顆粒,則需要8顆這樣的存儲器件。 2. 4bit容量 這個存儲…

【GitOps】Argo CD高級操作鉤子

Argo CD高級操作鉤子 文章目錄Argo CD高級操作鉤子資源列表一、Argo CD鉤子1.1、鉤子介紹1.2、構建的幾個執行階段1.3、鉤子刪除策略1.4、示例二、鉤子演示2.1、創建GitLab公共倉庫2.2、Argo CD創建Application2.3、同步&#xff08;SYNC&#xff09;資源列表 操作系統配置主機…

諳流 ASK 技術解析(一):秒級擴容

諳流 ASK 是諳流團隊自主研發的國產新一代云原生流平臺&#xff0c;與 Apache Kafka 100% 協議兼容&#xff0c;全棧自主可控&#xff0c;專注私有化部署與行業場景賦能。傳統Kafka存儲之殤IO模型缺陷每個分區對應獨立文件&#xff0c;采用單分區異步批量順序寫機制。當多分區并…

從挑西瓜到樹回歸:用生活智慧理解機器學習算法

一、生活中的決策樹&#xff1a;媽媽的挑瓜秘籍夏天的菜市場里&#xff0c;媽媽總能精準挑出最甜的西瓜。她的秘訣是一套簡單的決策流程&#xff1a;先看色澤&#xff0c;青綠有光澤的優先&#xff1b;再敲一敲&#xff0c;聲音沉悶的更可能熟&#xff1b;最后摸硬度&#xff0…

SpringBoot+PDF.js實現按需分片加載(包含可運行樣例源碼)

SpringBootPDF.js實現按需分片加載前言一、實現思路與實現效果1.1 pdf.js的分片加載的實現思路1.2 pdf分片加載的效果二、前端項目2.1 項目引入2.2 核心代碼2.3 項目運行三、后端項目3.1 項目結構3.2 核心代碼3.3 項目運行四、項目運行效果4.1 首次訪問4.2 分片加載五、項目優化…

常見Bash腳本漏洞分析與防御

引言 在Unix/Linux系統中&#xff0c;Bash腳本因其簡潔、高效而成為自動化任務、系統管理和快速原型開發的首選工具。然而&#xff0c;Bash的強大功能和其獨特的語法特性&#xff0c;也為安全漏洞埋下了隱患。許多開發者在追求便捷性的過程中&#xff0c;無意間引入了命令注入、…

JAVA快速學習(二)

類與對象因為本質是寫python的所以類與對象的概念就不贅述了&#xff0c;先看java中類與對象的創建方式public class Main {public static void main(String[] args) {Cat cat new Cat(); // Cat cat new Cat("zh",18); 這樣直接不對,這樣傳參就需要寫構造函數…

登錄優化(雙JWT+Redis)

流程 前端 → 后端 → 攔截器 → 限流 → AOP → Controller → 刷新 → 退出 前端登錄并獲取雙 JWT 1、前端:用戶在前端輸入用戶名和密碼,調用 /auth/login 接口。 fetch("/auth/login", {method: "POST",headers: {"Content-Type": &quo…

【雜類】Spring 自動裝配原理

這張圖&#xff0c;??正是理解現代 Spring Boot 自動配置的鑰匙??。它指出的 AutoConfiguration.imports 文件&#xff0c;是 Spring Boot 2.7 之后的新標準&#xff0c;比老式的 spring.factories 更簡潔。咱們就從這個文件開始說。一、自動配置是啥&#xff1f;為啥需要它…

【CSS,DaisyUI】自定義選取內容的顏色主題

當你的網站使用了多個主題&#xff0c;比如 light/dark。當用戶選擇一段文本&#xff0c;常常會出現一個主題沒問題&#xff0c;另一個主題顏色怪怪的。是因為選擇區域的主題通常沒有變化&#xff0c;導致與當前主題不配合。 下面四種方法可解決這個問題&#xff1a; The probl…

Linux網絡接口命名詳解:從eth0到ens33

在Linux系統中&#xff0c;網絡接口的命名方式直接影響管理員對設備的理解與管理。從早期的eth0、wlan0到現代的ens33、enp0s3、eno1&#xff0c;Linux網絡接口命名規則經歷了顯著的演變。一、Linux網絡接口命名的歷史與演變 Linux網絡接口命名的歷史可以分為兩個主要時代&…