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

news/2025/2/26 7:48:16

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

def 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 json

def 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 sqlite3

def 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 pd

def 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 BeautifulSoup

def get_html(url):
    headers = {"User-Agent": "Mozilla/5.0"}
    response = requests.get(url, headers=headers)
    return response.text if response.status_code == 200 else None

def 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 products

def save_to_csv(data, filename="output.csv"):
    import 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}")

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.niftyadmin.cn/n/5868331.html

相关文章

class绑定和style绑定

class绑定 简单对象绑定 <template> <div><p :class"{active:isActive,text-danger:hasError}">Class样式绑定1</p> </div> </template> <script> export default{data(){return{isActive:true,hasError:true,}} } <…

python-leetcode-每日温度

739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:n len(temperatures)answer [0] * nstack [] # 存储索引for i, temp in enumerate(temperatures):while stack and temperat…

OceanBase + DeepSeek:5分钟免费搭建企业知识库

过去一个月&#xff0c;DeepSeek 在全球范围内引发了热烈讨论。其突破性的 AI 能力使其日流量显著超越 Claude 和 Perplexity&#xff0c;吸引了众多企业和技术专家的高度关注。随着 AI 技术的不断进步&#xff0c;企业正面临一场深刻的智能化变革——如何通过 AI 重构业务&…

Eclipse 快捷键

Eclipse 快捷键 概述 Eclipse 是一款广泛使用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;在Java、C/C、Python等多种编程语言的开发中都有着重要的地位。熟练掌握Eclipse的快捷键可以提高工作效率&#xff0c;以下是Eclipse中常用的快捷键汇总&#xff0c;供您参…

网络安全学习-常见安全漏洞检测以及修复方法-1

渗*透测试 渗透测试就是模拟攻击者入侵系统&#xff0c;对系统进行一步步渗透&#xff0c;发现系统的脆弱环节和隐藏风险。形成测试报告提供给系统的所有者&#xff0c;所有者根据报告对系统进行加固&#xff0c;提升系统的安全性&#xff0c;防止真正的攻击者入侵。 渗透测试…

BUU41 [GYCTF2020]FlaskApp1【SSTI】

题目&#xff1a; 加密处没啥事&#xff0c;但是解密的地方提交{{7*7}}就会返回报错界面&#xff0c;顺便把代码也爆出来了 text_decode base64.b64decode(text.encode()) 先将字符串 text编码为字节对象&#xff0c;然后使用 base64.b64decode 函数对这个字节对象进行 Base…

【多语言生态篇三】【DeepSeek×Go:高并发推理服务设计】

第一章:项目背景与选型考量 1.1 DeepSeek推理服务的业务挑战 日均请求量突破1.2亿次(峰值QPS达38万) 典型请求特征:50ms超时限制 | 10KB输入+2KB响应 流量特征:工作日周期性波动(早10点至晚8点负载增长300%) 1.2 Go语言脱颖而出的五大优势 (敲黑板!这里用餐馆厨房…

自动驾驶两个传感器之间的坐标系转换

有两种方式可以实现两个坐标系的转换。 车身坐标系下一个点p_car&#xff0c;需要转换到相机坐标系下&#xff0c;旋转矩阵R_car2Cam&#xff0c;平移矩阵T_car2Cam。点p_car在相机坐标系下记p_cam. 方法1&#xff1a;先旋转再平移 p_cam T_car2Cam * p_car T_car2Cam 需要注…