爬虫运行后如何保存数据?

ops/2025/2/27 3:41:37/

爬虫运行后,将获取到的数据保存到本地或数据库中是常见的需求。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.ppmy.cn/ops/161582.html

相关文章

SOME/IP协议的建链过程

在SOME/IP协议中,建立服务通信链路的过程主要涉及服务发现机制,通常需要以下三次交互: 服务提供者广播服务可用性(Offer Service) 服务提供者启动后,周期性地通过Offer Service消息向网络广播其提供的服务实例信息(如Service ID、Instance ID、通信协议和端口等)。 作用…

谈谈 ES 6.8 到 7.10 的功能变迁(4)- 聚合功能篇

这一篇我们继续了解 ES 7.10 相较于 ES 6.8 新增的聚合方法。 Rare Terms 聚合 功能说明 用于聚合查询出字段中的稀有项。ES 常见的统计方法是使用 term 查询的正向排序,但是在大数据量和高基数的数据分布场景下会出现 unbounded 错误。Rare 聚合弥补了这个场景的…

【删边问题——Tarjan求割边】

题目 并查集暴力代码 30p #include <bits/stdc.h> using namespace std; using ll long long;const int N 1e510;int n, m; int a[N], p[N]; ll ans 1e18; ll s[3]; bool st;struct edge {int a, b; } e[N];void init() {for(int i 1; i < n; i)p[i] i; }int fi…

DeepSeek基础之机器学习

文章目录 一、核心概念总结&#xff08;一&#xff09;机器学习基本定义&#xff08;二&#xff09;基本术语&#xff08;三&#xff09;假设空间&#xff08;四&#xff09;归纳偏好&#xff08;五&#xff09;“没有免费的午餐”定理&#xff08;NFL 定理&#xff09; 二、重…

【数据挖掘在量化交易中的应用:特征发现与特征提取】

好的&#xff0c;我将撰写一篇关于金融领域数据挖掘的技术博客&#xff0c;重点阐述特征发现和特征提取&#xff0c;特别是在量化交易中的应用。我会提供具体的实操步骤&#xff0c;并结合Python和TensorFlow进行代码示例。 完成后&#xff0c;我会通知您进行查看。 数据挖掘…

面试题——简述Vue 3的服务器端渲染(SSR)是如何工作的?

面试题——简述Vue3的服务器端渲染&#xff08;SSR&#xff09;是如何工作的&#xff1f; 服务器端渲染&#xff08;SSR&#xff09;已经成为了一个热门话题。Vue 3&#xff0c;作为一款流行的前端框架&#xff0c;也提供了强大的SSR支持。那么&#xff0c;Vue 3的SSR究竟是如何…

前端排序算法完全指南:从理论到实践

<!DOCTYPE html> <html> <head><title>前端排序算法终极指南</title><style>.container { max-width: 1000px; margin: 0 auto; padding: 20px; }.demo-container { margin: 30px 0; border: 1px solid #eee; padding: 20px; }.bars-wrapp…

Ascend NPU 架构 CANN 平台入门学习

Ascend NPU 架构 & CANN 平台入门学习 文章目录 Ascend NPU 架构 & CANN 平台入门学习 一、概述二、NPU 硬件架构 2.1 NPU SOC 架构 2.1.1 Ascend 3XX 架构2.1.2 Ascend 9XX 架构 2.2 NPU 达芬奇架构 2.2.1 计算单元2.2.2 存储单元2.2.3 控制单元 2.3 AI Core 电路结…