Python实战:将爬虫获取到的数据存到数据库中

news2025/1/16 9:11:44

在前几篇 Python 实战中,我们直接把爬虫获取到的数据存储到 excel 文件或者 csv 文件中。今天,我们将爬虫获取到的数据存储到数据库中。

而存到数据库中,我们可以选择 MySQL、PostgreSQL、SqLite、Sql Server 等数据库。

在这些数据库中 SqLite 最轻量级、不需要配置,Python 自带 SQLite ,今天我们选择将爬虫获取到的数据存到 SQLite 数据库中,以便以后进行查询和分析。

一、SQLite 简介

SQLite 是一个轻量级的关系型数据库,它是一个开源的嵌入式数据库引擎。SQLite 占用资源非常少,通常用于嵌入式应用程序和移动设备,也经常被用作桌面应用程序的本地数据库。由于其小巧和便携性,SQLite 成为了许多开发人员的首选数据库。

二、创建sqlite数据库

Python 的标准库中包含了一个名为 sqlite3 的模块,可以用于访问 SQLite 数据库。要使用 SQLite,只需在 Python 代码中导入 sqlite3 模块即可。

# 导入模块
import sqlite3

# 连接数据库
conn = sqlite3.connect('sqlite_test.db')

# 创建一个游标对象,用于执行 SQL 语句
cursor = conn.cursor()

# 创建表
cursor.execute('''CREATE TABLE person
       (id varchar(20) PRIMARY KEY,
        name varchar(20));''')

# 新增
cursor.execute("INSERT INTO person (id, name) VALUES ('1', '张三')")
cursor.execute("INSERT INTO person (id, name) VALUES ('2', '李四')")
cursor.execute("INSERT INTO person (id, name) VALUES ('3', '王五')")

# 关闭 cursor
cursor.close()
# 提交当前事务
conn.commit()
# 关闭连接
conn.close()

在同一级文件目录下,可以查看刚才执行程序后生成的数据库文件,截图如下:

三、数据库图形化工具

我们可以通过 SQLiteStudio、Navicat for SQLite 等图形化工具,或者在 Pycharm 中安装 Database Navigator 插件,直观的查看数据库表结构和数据。

本文使用 SQLiteStudio 图形化工具。

1、SQLiteStudio

  • GitHub 开源地址:https://github.com/pawelsalawa/sqlitestudio
  • 下载地址 1:https://sqlitestudio.pl/
  • 下载地址 2:https://github.com/pawelsalawa/sqlitestudio/releases

下载、安装、打开 SQLiteStudio,连接刚才生成的sqlite_test.db数据库文件,打开person表,就可以直观的看到刚才写入到数据库中的数据。

2、Database Navigator插件

也可以在 Pycharm 中安装 Database Navigator 插件,查看数据库表结构和数据。

四、爬虫实战

以爬取王者荣耀官网展示的 117 个英雄,保存到 SQLite 数据库为例。

打开王者荣耀官网——英雄资料网页,url 为https://pvp.qq.com/web201605/herolist.shtml

打开开发者工具,查看 Network 中的请求,找到heroist.json这个请求,在 Headers 里可以找到请求 url 为https://pvp.qq.com/web201605/js/herolist.json

在 Response 里可以看到返回的是 117 个英雄的属性,我们只保存其中的enamecnametitleskin_name4 个字段到本地数据库。

分析完成,开始写爬虫代码和保存到 SQLite 数据库的代码。

完整代码如下:

import requests
import pandas as pd
import sqlite3

url = "https://pvp.qq.com/web201605/js/herolist.json"
response_json = requests.get(url).json()
df = pd.json_normalize(response_json, errors='ignore')

# 选择保存的列
df = df.loc[:, ['ename', 'cname', 'title', 'skin_name']]

# 创建一个SQLite数据库连接
conn = sqlite3.connect('herolists.db')

# 将DataFrame写入SQLite数据库
df.to_sql('herolists_table', conn, if_exists='replace', index=False)

# 提交更改并关闭连接
conn.commit()
conn.close()

上面代码的执行逻辑如下:

  1. 导入所需的库:requests(用于发送 HTTP 请求),pandas(用于处理数据)和 sqlite3(用于连接 SQLite 数据库)。
  2. 定义 API 的 URL。
  3. 使用 requests.get() 方法获取 API 的响应,并使用 json() 方法将其转换为 JSON 格式。
  4. 使用 pd.json_normalize() 方法将 JSON 数据转换为 Pandas DataFrame。
  5. 选择要保存的列(enamecnametitleskin_name)。
  6. 使用 sqlite3.connect() 方法创建一个 SQLite 数据库连接。
  7. 使用 df.to_sql() 方法将 DataFrame 写入 SQLite 数据库。if_exists='replace' 参数表示如果表已存在,则替换它。index=False 参数表示不包含索引列。
  8. 使用 conn.commit() 方法提交更改,并使用 conn.close() 方法关闭连接。

五、查看数据

使用 SQLiteStudio 图形化工具,连接刚才生成的herolists.db数据库文件,打开herolists_table表,就可以直观的看到刚才写入到数据库中的数据,117 条数据已经保存到 SQLite 数据库。

六、总结

在这个 Python 实战中,我们学习了如何将爬虫获取到的数据存储到数据库中。首先,我们使用requests库获取了 API 的数据,并将其转换为 JSON 格式。然后,我们使用pandas库将 JSON 数据转换为 DataFrame,并从中选择了需要保存的列。接下来,我们使用sqlite3库创建了一个 SQLite 数据库连接,并将 DataFrame 写入到了数据库中。最后,我们提交了更改并关闭了连接。

通过这个实战,我们学会了如何使用 Python 将爬虫获取到的数据存储到 SQLite 数据库中。这为我们在实际项目中处理和分析数据提供了很大的便利。然而,这仅仅是一个简单的示例,实际项目中可能需要处理更复杂的数据和数据库。因此,我们需要不断学习和探索,以提高自己的数据处理能力。

本文首发在“程序员coding”公众号,欢迎关注与我一起交流学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1416857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重装Windows系统出现Windows无法安装到这个磁盘,选中的磁盘采用GPT分区

文章目录 1.问题描述2.问题解决 1.问题描述 重装Windows系统时,出现Windows无法安装到这个磁盘,选中的磁盘采用GPT分区这个提示 2.问题解决 1.shiftF10,打开命令行 2.输入:diskpart (打开分区工具) 3.输入:list di…

C语言“%”运算符是否可以对小数进行运算?

一、问题 “&#xff05;”运算符是否可以对⼩数进⾏运算&#xff1f; 二、解答 “&#xff05;”运算符&#xff0c;称为求余运算符或者模运算符&#xff0c;要求“&#xff05;”两侧都为整型数据&#xff0c;否则将会产⽣错误 #include <stdio.h> int main() {floa…

电路笔记 :MOS场效应晶体管+红外遥控+AMS1117 电源模块

三极管&#xff08;BJT&#xff0c;Bipolar Junction Transistor&#xff09;和 MOSFET&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor&#xff09;是两种不同类型的晶体管&#xff0c;它们在工作原理、性能特性和应用方面有一些重要的区别。 结构和工作原理…

Qt项目文件以及对象树

"在哪里走散&#xff0c;你都会找到我~" 前篇&#xff0c;我们仅仅对Qt创建了第一个简单的项目。相比于使用其他IDE创建工程项目&#xff0c;Qt会为自动创建诸如&#xff1a;.pro、.h\.cpp、.iu等文件&#xff0c;这些文件到底是什么&#xff1f;我们在使用Qt时 应该…

欢迎来到 Greasy Fork,这里是一个提供用户脚本的网站。

官方地址&#xff1a; https://greasyfork.org/zh-CN 欢迎来到 Greasy Fork&#xff0c;这里是一个提供用户脚本的网站。 脚本适用于&#xff1a; baidu.com bilibili.com qq.com iqiyi.com sohu.com 更多… 用户脚本是什么&#xff1f; 用户脚本是一段代码&#xff0c;它们能…

前端——CSS

目录 文章目录 前言 一.CSS简介 1.CSS选择器 2.CSS选择器语法 3.CSS样式引入 4.CSS 高级选择器 二.CSS样式 1.字体 ​编辑 2.文本 3. 背景 4.边框 5.边距 6.浮动 7.清除浮动 8.定位 9. 列表样式 10.伪类样式 三.盒子模型 四.CSS3新特性 1.边框 2.盒子阴影 …

win11设置mysql开机自启

目录 命令式 1、打开命令提示符或 PowerShell&#xff1a; 2、使用管理员权限运行命令行工具&#xff1a; 3、设置 MySQL 服务为开机自启动&#xff1a; 4、启动 MySQL 服务&#xff1a; 5、 验证设置是否生效&#xff1a; 操作视图式 1、右击任务栏 ---> 选择任务管…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--强化学习、模仿学习、机器人、开放词汇

专属领域论文订阅 关注{晓理紫|小李子}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新论文。 分类: 大语言模型LLM视觉模型VLM扩散模型视觉…

经典目标检测YOLO系列(三)YOLOV3的复现(1)总体网络架构及前向处理过程

经典目标检测YOLO系列(三)YOLOV3的复现(1)总体网络架构及前向处理过程 和之前实现的YOLOv2一样&#xff0c;根据《YOLO目标检测》(ISBN:9787115627094)一书&#xff0c;在不脱离YOLOv3的大部分核心理念的前提下&#xff0c;重构一款较新的YOLOv3检测器&#xff0c;来对YOLOv3有…

网络安全科普:SSL证书保护我们的网上冲浪安全

当我们在线上愉快冲浪时&#xff0c;各类网站数不胜数&#xff0c;但是如何判定该站点是安全还是有风险呢&#xff1f; 当当当&#xff0c;SSL数字证书登场&#xff01;&#xff01; SSL证书也称为数字证书&#xff0c;是一种用于保护网站和用户之间通信安全的加密协议。由权…

SERVLET生命周期API

SERVLET生命周期API 在servlet的生命周期中,将发生创建Servlet上下文、创建会话、向Servlet上下文添加属性等各种事件。在servlet的生命周期内发生事件时,Web容器将通知侦听器类。要接收事件的通知,侦听器类需要扩展Servlet API的侦听器接口。 1. 事件类型 servlet生命周期…

DeepL 解除翻译文档的编辑限制

在使用DeepL官网翻译文档时&#xff0c;您可能会遇到无法编辑的问题。本文将详细介绍如何解除密码限制&#xff0c;使DeepL翻译文档变得可编辑。 第一步&#xff1a;文档翻译和下载 将需要翻译的文档上传至DeepL&#xff0c;进行整篇文档翻译。完成翻译后&#xff0c;下载翻译…

yum指令——Linux的软件包管理器

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 什么是软件包yum指令1.yum 是什么&#xff1f;2.Linux系统&#xff08;Centos&#xff09;的生态 3.yum的相关操作安装卸载yum的相关操作小结 软件源安…

[攻防世界]-Web:inget解析

查看网页 很明显&#xff0c;他是要我们输入id 这里我尝试了直接爆破&#xff0c;没有成功 解法一&#xff08;用万能密码&#xff09;&#xff1a; payload如下&#xff1a; 我这里还尝试了id1 or true # 没有成功&#xff0c;应该是题目把#给过滤了 解法二&#xff1a; …

【Javaweb程序设计】【C00165】基于SSM的高考志愿辅助填报系统(论文+PPT)

基于SSM的高考志愿辅助填报系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的高考志愿辅助填报系统 本系统分为前台系统模块、后台管理员模块以及后台学生模块 前台系统模块&#xff1a;当游客打开系统的网址后&…

网络编程套接字(2)

UDP数据报套接字编程 API介绍 DatagramSocket DatagramSocket是UDP的Socket,用于发送和接收数据报. 操作系统中有一类文件,就叫做socket文件(普通文件/目录文件:在硬盘上的) socket文件:抽象的表示了网卡这样的硬件设备 DatagramSocket就是对socket文件进行读写,也就是借助网…

【Java】Spring注解开发

一、Spring注解开发 1 注解开发定义Bean对象【重点】 目的&#xff1a;xml配置Bean对象有些繁琐&#xff0c;使用注解简化Bean对象的定义 问题导入 问题1&#xff1a;使用什么标签进行Spring注解包扫描&#xff1f; 问题2&#xff1a;Component注解和Controller、Service、R…

2024-1-26学习任务:堆实现算法和topK问题

前言 本文的学习任务&#xff1a;关于堆的实现以及相关的基础操作&#xff0c;包括向上调整算法和向下调整算法&#xff0c;同时利用该算法解决常见的topk问题&#xff0c;之后再对两种算法的时间复杂度进行分析&#xff0c;加深理解。 1.堆的实现 前面提到过&#xff0c;堆…

Jmeter学习系列之一:Jmeter的详细介绍

目录 一、Jmeter的介绍 二、Jemeter的特点 三、Jemter相关概念 3.1采样器&#xff08;Samplers&#xff09; 3.2逻辑控制器&#xff08;Logic Controllers&#xff09; 3.3监听器&#xff08;Listeners&#xff09; 3.4配置元件&#xff08;Configuration Elements&#…

算法沉淀——滑动窗口(leetcode真题剖析)

算法沉淀——滑动窗口 01.长度最小的子数组02.无重复字符的最长子串03.最大连续1的个数 III04.将 x 减到 0 的最小操作数05.水果成篮06.找到字符串中所有字母异位词07.串联所有单词的子串08.最小覆盖子串 滑动窗口算法是一种用于解决数组或列表中子数组或子序列问题的有效技巧。…