python解析json内容存入数据库方式
目录
- 用OlGHnpython写一个github Trending API
- 要求
- 1.用到的库
- 2.抓取url
- 3.解析内容
- 4.连接数据库
- Questions
- 总结
用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, # 语言 'langua编程客栈ge': 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') # 连接数据库的路径。 # js“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, sphpelf.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。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
精彩评论