python解析json内容存入数据库方式

 更新时间:2025年05月24日 15:41:07   作者:知识倒进我脑里  
这篇文章主要介绍了python解析json内容存入数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

用python写一个Github Trending API

由于才开始学习python,很多东西都不会,花了好多天来把这个东西写好,于是记录如下。

要求

用requests库抓取热门仓库的信息,并存入数据库

1.用到的库

import requests
from sqlalchemy import desc, create_engine, Column, Integer, String, Text  # 降序、连接路径、列、字符串、文本
from sqlalchemy.orm import scoped_session, sessionmaker  # 代理模式、数据库连接的媒(手机);engine号码
from sqlalchemy.ext.declarative import declarative_base  # 声明类映射类到表的关系

2.抓取url

url = 'http://132.232.132.144:8009/api?lang=python&since=daily'
response = requests.get(url)

3.解析内容

response_dict = response.json()

内容大致是这些:字典里面三个元素,第三个元素msg是一个列表,列表里面是各个热门仓库的信息

我们要分析的就是msg里面的内容

repositories = response_dict['msg']

遍历列表字典

for res in repositories:
    language = res['language']
    user = res['user']
    stars = res['stars']
    repo = res['repo']
    forks = res['forks']
    about = res['about']
    link = res['link']
    new_stars = res['new_stars']
    avatars = res['avatars']
    api_info = {
        # 项目名称
        'repo': repo,
        # 语言
        'language': language,
        # 仓库拥有者
        'user': user,
        # star数
        'stars': stars,
        # fork数
        'forks': forks,
        # 描述
        'about': res['about'],
        # 链接
        'link': res['link'],
        # 新增star
        'new_stars': res['new_stars'],
        # 头像
        'avatars': res['avatars']

    }

4.连接数据库

# 创建连接:'数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
engine = create_engine('mysql+pymysql://root:19981010@localhost:3306/oceanlay?charset=utf8mb4')

# 连接数据库的路径。
# “mysql+mysqldb”指定了使用 MySQL-Python 来连接,
# 声明类 类到表的关系
Base = declarative_base()
# 创建数据表
Base.metadata.create_all(engine)

#定义python类

class Api(Base):
    __tablename__ = 'api'
    id = Column(Integer, primary_key=True)    #主键primary_key必须存在于某个字段中 
    repo = Column(String(128))  # repository name    #注意字段的数据类型与数据长度,设置相对应的类型
    language = Column(String(6))  # repository language
    user = Column(String(128))  # user
    stars = Column(String(128))
    forks = Column(String(128))
    link = Column(Text)
    new_stars = Column(String(128))

    def __repr__(self):
        return "<Api(id='%d',repo=%s,language=%s,user=%s,stars=%d,forks=%d,link=%s,new_stars=%s)>" \
               % (self.repo, self.language, self.user, self.stars, self.forks, self.link, self.new_stars,)
# 向表中插入数据
DBSession = sessionmaker(bind=engine)  #sessionmaker好比数据库和内容联系的手机,engine就是联系号码
session = DBSession()
# 写入数据
session.add(
    Api(repo=api_info['repo'], language=api_info['language'], user=api_info['user'], stars=api_info['stars'],
        forks=api_info['forks'], link=api_info['link'], new_stars=api_info['new_stars'])
        )    #注意添加到哪一个表里面 就写那个表

遍历输出:format函数

for res in repositories:
    print("仓库名:{repo}\n语言:{language}\n用户:{user}\nstars:{stars}\nforks:{forks}\n项目描述about:{about}\n网址:{link}\n关注者头像:{avatars}".format(repo=res['repo'], language=res['language'],  user=res['user'], stars=res['stars'],forks=res['forks'], about=res['about'], link=res['link'],avatars=res['avatars']))

Questions

遍历列表字典时,一直得到的只有第一个仓库的东西,后来将写入数据的代码放入遍历循环中,ok!

连接数据库时,(还没学过数据库555),对应的端口、用户开始没搞清楚,一直没有连接成功

先建表再写数据,表内字段也要建好才可以,不然写不进去的,要注意数据类型和数据长度,不然会产生各种报错!

PS:由于热门项目的url得到的是html内容 虽然用beautifulsoup可以将内容提取出来 但是我太菜了 我提到一半不知道怎么搞了,于是就用了博主直接提供的api。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • pd.drop_duplicates删除重复行的方法实现

    pd.drop_duplicates删除重复行的方法实现

    drop_duplicates 方法实现对数据框 DataFrame 去除特定列的重复行,本文主要介绍了pd.drop_duplicates删除重复行的方法实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • python中的全局变量用法分析

    python中的全局变量用法分析

    这篇文章主要介绍了python中的全局变量用法,详细分析了Python全局变量使用中的利弊与相关技巧,需要的朋友可以参考下
    2015-06-06
  • Python基于mediainfo批量重命名图片文件

    Python基于mediainfo批量重命名图片文件

    这篇文章主要介绍了Python基于mediainfo批量重命名图片文件的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • 使用Python脚本备份华为交换机的配置信息

    使用Python脚本备份华为交换机的配置信息

    在现代网络管理中,备份交换机的配置信息是一项至关重要的任务,备份可以确保在交换机发生故障或配置错误时,能够迅速恢复到之前的工作状态,本文将详细介绍如何使用Python脚本备份华为交换机的配置信息,需要的朋友可以参考下
    2024-06-06
  • Python3之字节串bytes与字节数组bytearray的使用详解

    Python3之字节串bytes与字节数组bytearray的使用详解

    今天小编就为大家分享一篇Python3之字节串bytes与字节数组bytearray的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python爬取股票交易数据并可视化展示

    Python爬取股票交易数据并可视化展示

    抛开炒股技术不说, 那么多股票数据是不是非常难找,找到之后是不是看着密密麻麻的数据是不是头都大了?今天带大家爬取雪球平台的股票数据并将其可视化
    2021-12-12
  • 深入探究Flask的两个高级特性之蓝图和JWT认证

    深入探究Flask的两个高级特性之蓝图和JWT认证

    本文将探讨 Flask 的两个高级特性:蓝图(Blueprints)和 JSON Web Token(JWT)认证,蓝图让我们可以将应用模块化,以便更好地组织代码;而 JWT 认证是现代 Web 应用中常见的一种安全机制,感兴趣的小伙伴跟着小编一起来看看吧
    2023-08-08
  • python获取array中指定元素的示例

    python获取array中指定元素的示例

    今天小编就为大家分享一篇python获取array中指定元素的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 使用Python实现计算DICOM图像两点真实距离

    使用Python实现计算DICOM图像两点真实距离

    这篇文章主要为大家详细介绍了如何使用Python实现计算DICOM图像两点真实距离,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • Python3.2模拟实现webqq登录

    Python3.2模拟实现webqq登录

    这篇文章主要介绍了Python模拟实现webqq登录的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-02-02

最新评论