python解析json內(nèi)容存入數(shù)據(jù)庫方式
用python寫一個(gè)Github Trending API
由于才開始學(xué)習(xí)python,很多東西都不會,花了好多天來把這個(gè)東西寫好,于是記錄如下。
要求
用requests庫抓取熱門倉庫的信息,并存入數(shù)據(jù)庫
1.用到的庫
import requests from sqlalchemy import desc, create_engine, Column, Integer, String, Text # 降序、連接路徑、列、字符串、文本 from sqlalchemy.orm import scoped_session, sessionmaker # 代理模式、數(shù)據(jù)庫連接的媒(手機(jī));engine號碼 from sqlalchemy.ext.declarative import declarative_base # 聲明類映射類到表的關(guān)系
2.抓取url
url = 'http://132.232.132.144:8009/api?lang=python&since=daily' response = requests.get(url)
3.解析內(nèi)容
response_dict = response.json()
內(nèi)容大致是這些:字典里面三個(gè)元素,第三個(gè)元素msg是一個(gè)列表,列表里面是各個(gè)熱門倉庫的信息

我們要分析的就是msg里面的內(nèi)容
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 = {
# 項(xiàng)目名稱
'repo': repo,
# 語言
'language': language,
# 倉庫擁有者
'user': user,
# star數(shù)
'stars': stars,
# fork數(shù)
'forks': forks,
# 描述
'about': res['about'],
# 鏈接
'link': res['link'],
# 新增star
'new_stars': res['new_stars'],
# 頭像
'avatars': res['avatars']
}4.連接數(shù)據(jù)庫
# 創(chuàng)建連接:'數(shù)據(jù)庫類型+數(shù)據(jù)庫驅(qū)動名稱://用戶名:口令@機(jī)器地址:端口號/數(shù)據(jù)庫名'
engine = create_engine('mysql+pymysql://root:19981010@localhost:3306/oceanlay?charset=utf8mb4')
# 連接數(shù)據(jù)庫的路徑。
# “mysql+mysqldb”指定了使用 MySQL-Python 來連接,
# 聲明類 類到表的關(guān)系
Base = declarative_base()
# 創(chuàng)建數(shù)據(jù)表
Base.metadata.create_all(engine)#定義python類
class Api(Base):
__tablename__ = 'api'
id = Column(Integer, primary_key=True) #主鍵primary_key必須存在于某個(gè)字段中
repo = Column(String(128)) # repository name #注意字段的數(shù)據(jù)類型與數(shù)據(jù)長度,設(shè)置相對應(yīng)的類型
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,)# 向表中插入數(shù)據(jù) DBSession = sessionmaker(bind=engine) #sessionmaker好比數(shù)據(jù)庫和內(nèi)容聯(lián)系的手機(jī),engine就是聯(lián)系號碼 session = DBSession()
# 寫入數(shù)據(jù)
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'])
) #注意添加到哪一個(gè)表里面 就寫那個(gè)表遍歷輸出:format函數(shù)
for res in repositories:
print("倉庫名:{repo}\n語言:{language}\n用戶:{user}\nstars:{stars}\nforks:{forks}\n項(xiàng)目描述about:{about}\n網(wǎng)址:{link}\n關(guā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
遍歷列表字典時(shí),一直得到的只有第一個(gè)倉庫的東西,后來將寫入數(shù)據(jù)的代碼放入遍歷循環(huán)中,ok!
連接數(shù)據(jù)庫時(shí),(還沒學(xué)過數(shù)據(jù)庫555),對應(yīng)的端口、用戶開始沒搞清楚,一直沒有連接成功
先建表再寫數(shù)據(jù),表內(nèi)字段也要建好才可以,不然寫不進(jìn)去的,要注意數(shù)據(jù)類型和數(shù)據(jù)長度,不然會產(chǎn)生各種報(bào)錯!
PS:由于熱門項(xiàng)目的url得到的是html內(nèi)容 雖然用beautifulsoup可以將內(nèi)容提取出來 但是我太菜了 我提到一半不知道怎么搞了,于是就用了博主直接提供的api。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
pd.drop_duplicates刪除重復(fù)行的方法實(shí)現(xiàn)
drop_duplicates 方法實(shí)現(xiàn)對數(shù)據(jù)框 DataFrame 去除特定列的重復(fù)行,本文主要介紹了pd.drop_duplicates刪除重復(fù)行的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
Python3之字節(jié)串bytes與字節(jié)數(shù)組bytearray的使用詳解
今天小編就為大家分享一篇Python3之字節(jié)串bytes與字節(jié)數(shù)組bytearray的使用詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
深入探究Flask的兩個(gè)高級特性之藍(lán)圖和JWT認(rèn)證
本文將探討 Flask 的兩個(gè)高級特性:藍(lán)圖(Blueprints)和 JSON Web Token(JWT)認(rèn)證,藍(lán)圖讓我們可以將應(yīng)用模塊化,以便更好地組織代碼;而 JWT 認(rèn)證是現(xiàn)代 Web 應(yīng)用中常見的一種安全機(jī)制,感興趣的小伙伴跟著小編一起來看看吧2023-08-08
使用Python實(shí)現(xiàn)計(jì)算DICOM圖像兩點(diǎn)真實(shí)距離
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)計(jì)算DICOM圖像兩點(diǎn)真實(shí)距離,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
Python3.2模擬實(shí)現(xiàn)webqq登錄
這篇文章主要介紹了Python模擬實(shí)現(xiàn)webqq登錄的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02

