爬蟲運行后如何保存數據?

爬蟲運行后,將獲取到的數據保存到本地或數據庫中是常見的需求。Python 提供了多種方式來保存數據,包括保存為文本文件、CSV 文件、JSON 文件,甚至存儲到數據庫中。以下是幾種常見的數據保存方法,以及對應的代碼示例。


1.?保存為文本文件

將爬取到的數據保存為簡單的文本文件是最基礎的方式,適合存儲少量數據。

def save_to_text(data, filename="output.txt"):with open(filename, "w", encoding="utf-8") as file:for item in data:file.write(str(item) + "\n")print(f"數據已保存到 {filename}")

示例:

data = ["商品1", "商品2", "商品3"]
save_to_text(data)

2.?保存為 CSV 文件

CSV 文件是表格數據的常用格式,適合存儲結構化數據,例如商品詳情。

import csvdef save_to_csv(data, filename="output.csv"):keys = data[0].keys()  # 假設數據是字典列表with open(filename, "w", newline="", encoding="utf-8") as file:writer = csv.DictWriter(file, fieldnames=keys)writer.writeheader()writer.writerows(data)print(f"數據已保存到 {filename}")

示例:

data = [{"name": "商品1", "price": "100元", "description": "這是商品1"},{"name": "商品2", "price": "200元", "description": "這是商品2"}
]
save_to_csv(data)

3.?保存為 JSON 文件

JSON 是一種輕量級的數據交換格式,適合存儲復雜的數據結構,例如嵌套字典。

import jsondef save_to_json(data, filename="output.json"):with open(filename, "w", encoding="utf-8") as file:json.dump(data, file, ensure_ascii=False, indent=4)print(f"數據已保存到 {filename}")

示例:

data = [{"name": "商品1", "price": "100元", "description": "這是商品1"},{"name": "商品2", "price": "200元", "description": "這是商品2"}
]
save_to_json(data)

4.?保存到數據庫

對于需要長期存儲和頻繁查詢的數據,保存到數據庫是更好的選擇。以下是保存到 SQLite 數據庫的示例:

import sqlite3def save_to_database(data, db_name="database.db", table_name="products"):conn = sqlite3.connect(db_name)cursor = conn.cursor()# 創建表(如果不存在)cursor.execute(f"""CREATE TABLE IF NOT EXISTS {table_name} (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,price TEXT,description TEXT)""")# 插入數據for item in data:cursor.execute(f"""INSERT INTO {table_name} (name, price, description)VALUES (?, ?, ?)""", (item["name"], item["price"], item["description"]))conn.commit()conn.close()print(f"數據已保存到數據庫 {db_name}")

示例:

data = [{"name": "商品1", "price": "100元", "description": "這是商品1"},{"name": "商品2", "price": "200元", "description": "這是商品2"}
]
save_to_database(data)

5.?保存到 Excel 文件

如果需要將數據保存為 Excel 文件,可以使用 pandas 庫:

import pandas as pddef save_to_excel(data, filename="output.xlsx"):df = pd.DataFrame(data)df.to_excel(filename, index=False)print(f"數據已保存到 {filename}")

示例:

data = [{"name": "商品1", "price": "100元", "description": "這是商品1"},{"name": "商品2", "price": "200元", "description": "這是商品2"}
]
save_to_excel(data)

6.?選擇合適的保存方式

  • 文本文件:適合簡單的日志或少量數據。

  • CSV 文件:適合結構化數據,便于后續分析。

  • JSON 文件:適合復雜數據結構,便于數據交換。

  • 數據庫:適合大規模數據存儲和復雜查詢。

  • Excel 文件:適合需要在 Excel 中進一步處理的數據。


7.?示例:整合到爬蟲程序中

以下是一個完整的爬蟲程序示例,將爬取到的數據保存為 CSV 文件:

import requests
from bs4 import BeautifulSoupdef get_html(url):headers = {"User-Agent": "Mozilla/5.0"}response = requests.get(url, headers=headers)return response.text if response.status_code == 200 else Nonedef parse_html(html):soup = BeautifulSoup(html, "lxml")products = []items = soup.select(".product-item")for item in items:product = {"name": item.select_one(".product-name").text.strip(),"price": item.select_one(".product-price").text.strip(),"description": item.select_one(".product-description").text.strip()}products.append(product)return productsdef save_to_csv(data, filename="output.csv"):import csvkeys = data[0].keys()with open(filename, "w", newline="", encoding="utf-8") as file:writer = csv.DictWriter(file, fieldnames=keys)writer.writeheader()writer.writerows(data)print(f"數據已保存到 {filename}")def main():url = "https://www.example.com/vip-products"html = get_html(url)if html:products = parse_html(html)if products:save_to_csv(products)else:print("未找到商品信息")else:print("無法獲取頁面內容")if __name__ == "__main__":main()

通過以上方法,你可以根據需求選擇合適的方式保存爬蟲運行后的數據。無論是簡單的文本文件,還是復雜的數據庫存儲,Python 都提供了強大的支持。希望這些示例能幫助你更好地管理和利用爬取到的數據!

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

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

相關文章

計算機視覺:經典數據格式(VOC、YOLO、COCO)解析與轉換(附代碼)

第一章:計算機視覺中圖像的基礎認知 第二章:計算機視覺:卷積神經網絡(CNN)基本概念(一) 第三章:計算機視覺:卷積神經網絡(CNN)基本概念(二) 第四章:搭建一個經典的LeNet5神經網絡(附代碼) 第五章&#xff1…

linux--多進程基礎(2)GDB多進程調試(面試會問)

將其中的命令記住就行。 總結:GDB下默認調試父進程,可以設置調試父進程還是子進程,也可以設置調試模式,調試模式默認是on即一個在調試另一個直接運行,off就是另一個進程掛起,最后可以查看調試進程 一般默認…

Cramér-Rao界:參數估計精度的“理論底線”

Cramr-Rao界:參數估計精度的“理論底線” 在統計學中,當我們用數據估計一個模型的參數時,總希望估計結果盡可能精確。但精度有沒有一個理論上的“底線”呢?答案是有的,這就是Cramr-Rao界(Cramr-Rao Lower …

【復習】Redis

數據結構 Redis常見的數據結構 String&#xff1a;緩存對象Hash&#xff1a;緩存對象、購物車List&#xff1a;消息隊列Set&#xff1a;點贊、共同關注ZSet&#xff1a;排序 Zset底層&#xff1f; Zset底層的數據結構是由壓縮鏈表或跳表實現的 如果有序集合的元素 < 12…

Git add --- error: Filename too long

0 Preface/Foreword 1 解決辦法 git config --system core.longpaths true

在 Spring Boot 中使用 `@Autowired` 和 `@Bean` 注解

文章目錄 在 Spring Boot 中使用 Autowired 和 Bean 注解示例背景 1. 定義 Student 類2. 配置類&#xff1a;初始化 Bean3. 測試類&#xff1a;使用 Autowired 注解自動注入 Bean4. Spring Boot 的自動裝配5. 總結 在 Spring Boot 中使用 Autowired 和 Bean 注解 在 Spring Bo…

【AI+智造】DeepSeek價值重構:當采購與物控遇上數字化轉型的化學反應

作者&#xff1a;Odoo技術開發/資深信息化負責人 日期&#xff1a;2025年2月24日 引言&#xff1a;從事企業信息化工作16年&#xff0c;我見證過無數企業從手工臺賬到ERP系統的跨越。但真正讓采購和物控部門脫胎換骨的&#xff0c;是融合了Deepseek AI的Odoo數字化解決方案——…

qt-C++筆記之創建和初始化 `QGraphicsScene` 和 `QGraphicsView` 并關聯視圖和場景的方法

qt-C++筆記之創建和初始化 QGraphicsScene 和 QGraphicsView 并關聯視圖和場景的方法 code review! 參考筆記 1.qt-C++筆記之創建和初始化 QGraphicsScene 和 QGraphicsView 并關聯視圖和場景的方法 2.qt-C++筆記之QGraphicsScene和 QGraphicsView中setScene、通過scene得到vie…

Java Map實現類面試題

Java Map實現類面試題 HashMap Q1: HashMap的實現原理是什么&#xff1f; HashMap基于哈希表實現&#xff0c;使用數組鏈表紅黑樹&#xff08;Java 8&#xff09;的數據結構。 public class HashMapPrincipleExample {// 模擬HashMap的基本結構public class SimpleHashMap&…

Win32/ C++ 簡易對話框封裝框架(多語言, 通知欄菜單, 拖拽文件處理)

Win32 簡易對話框封裝簡易框架示例 1. 菜單操作: 多語言 2. 通知欄圖標菜單 3. 其他操作: 接受拖拽文件等等 CDialogFrame.h #pragma once #include "CWindow/CDialogBase.h" #include "CNSFHeader.h" #include "Win32Utils/CBytesUtils.h" …

如何在WordPress網站中查看移動版本—快速預覽與自定義設置

在WordPress網站的構建過程中&#xff0c;確保網站在移動端的顯示效果至關重要。畢竟&#xff0c;隨著越來越多的用戶通過手機訪問互聯網&#xff0c;一個優化良好的移動版網站將直接影響用戶的留存率和訪問體驗。 如果你是WordPress網站的所有者&#xff0c;本文將向你介紹如…

課程1. 深度學習簡介

課程1. 深度學習簡介 神經網絡結構邏輯回歸XOR問題&#xff08;異或問題&#xff09; 中間特征的生成全連接神經網絡中間網絡層的激活函數Sigmoid函數Tanh函數ReLU函數其它激活函數 使用全連接神經網絡解決 XOR 問題神經網絡用于回歸問題訓練神經網絡 不同類型的神經網絡 附加材…

Vue.js Vue 測試工具:Vue Test Utils 與 Jest

Vue.js Vue 測試工具&#xff1a;Vue Test Utils 與 Jest 在 Vue.js 的開發過程中&#xff0c;編寫和執行測試是確保應用質量和穩定性的關鍵步驟。Vue Test Utils 和 Jest 是 Vue.js 官方推薦的測試工具&#xff0c;二者結合使用&#xff0c;可以高效地進行單元測試和集成測試…

數據結構 1-2 線性表的鏈式存儲-鏈表

1 原理 順序表的缺點&#xff1a; 插入和刪除移動大量元素數組的大小不好控制占用一大段連續的存儲空間&#xff0c;造成很多碎片 鏈表規避了上述順序表缺點 邏輯上相鄰的兩個元素在物理位置上不相鄰 頭結點 L&#xff1a;頭指針 頭指針&#xff1a;鏈表中第一個結點的存儲…

各種以太坊Rollup技術

以太坊Rollup技術是一種通過將大量交易批處理并在主鏈上記錄較小的數據摘要來擴展以太坊網絡的方法。Rollup技術主要分為兩種類型&#xff1a;樂觀Rollup&#xff08;Optimistic Rollup&#xff09;和零知識Rollup&#xff08;ZK-Rollup&#xff09;。下面詳細介紹這兩種技術及…

Kubernetes開發環境minikube | 開發部署MySQL單節點應用

minikube是一個主要用于開發與測試Kubernetes應用的運行環境 本文主要描述在minikube運行環境中部署MySQL單節點應用 minikube start --force kubectl get nodes 如上所示&#xff0c;啟動minikube單節點運行環境 minikube ssh docker pull 如上所示&#xff0c;從MySQL官…

DeepSeek 助力 Vue 開發:打造絲滑的二維碼生成(QR Code)

前言&#xff1a;哈嘍&#xff0c;大家好&#xff0c;今天給大家分享一篇文章&#xff01;并提供具體代碼幫助大家深入理解&#xff0c;徹底掌握&#xff01;創作不易&#xff0c;如果能幫助到大家或者給大家一些靈感和啟發&#xff0c;歡迎收藏關注哦 &#x1f495; 目錄 Deep…

一文詳解U盤啟動UEFI/Legacy方式以及GPT/MBR關系

對于裝系統的老手而說一直想研究一下裝系統的原理&#xff0c;以及面對一些問題時的解決思路&#xff0c;故對以前的方法進行原理上的解釋&#xff0c;主要想理解其底層原理。 引導模式 MBR分區可以同時支持UEFI和Legacy引導&#xff0c;我們可以看一下微pe制作的啟動盤&#…

回合制游戲文字版(升級)

//在上一篇博客的基礎上&#xff0c;加了細節的改動 //改動&#xff1a;添加了外貌&#xff0c;性別&#xff0c;招式的細節描繪&#xff1b;添加了個人信息展示界面 //一創建java文件1&#xff0c;命名為playGame package test2;import java.util.Random;public class play…

halcon三維點云數據處理(二十五)moments_object_model_3d

目錄 一、moments_object_model_3d例程二、moments_object_model_3d函數三、效果圖一、moments_object_model_3d例程 這個例子說明了如何使用moments_object_model_3d運算符來將3D數據與x、y、z坐標軸對齊。在實際應用中,通過3D傳感器獲取的物體模型可能具有一個與物體主軸不…