学习大数据DAY33 Flask 库 API 开发介绍,OS 库,pandas 库和简单爬虫

目录

[Python API 接口开发用法介绍](#Python API 接口开发用法介绍)

[Postman 调试接口](#Postman 调试接口)

[OS 库](#OS 库)

pandas

[Pandas 数据结构 - Series](#Pandas 数据结构 - Series)

[Pandas 处理数据方法](#Pandas 处理数据方法)

[Pandas CSV 文件](#Pandas CSV 文件)

[Pandas JSON](#Pandas JSON)

[Pandas excel 文件](#Pandas excel 文件)

[上机练习 11](#上机练习 11)

爬虫

爬取所有数据

[pandas 分析处理数据](#pandas 分析处理数据)

[导入到 mysql](#导入到 mysql)

[上机练习 12---使用爬虫+pandas+os 获取处理导入数据](#上机练习 12---使用爬虫+pandas+os 获取处理导入数据)


Python API****接口开发用法介绍

API ( Application Programming Interface )是应用程序接口的简称,是一
种使得不同软件之间进行互操作的定义和协议。
以 Flask 为例进行 Python API 接口的开发
from flask import Flask
app=Flask(name)

定义一个 API 接口

@app.route("/")
def index():
return "<a href='/list'><img src='/static/py11.png'/></a>"
以上就是一个极简的 Python API 接口,通过访问 'http://127.0.0.1:5000' ,
就可以获得的响应。
from flask import Flask,jsonify,request
from DAL import MovieTypeDAL
from Model import MovieType
app=Flask(name)
mtdal=MovieTypeDAL()

定义一个 API 接口

@app.route("/addSubmit", methods=["POST"])
def addSubmit():
tid = request.form.get("tid")
tname = request.form.get("tname")
tcontent=request.form.get("tcontent")
leixing=MovieType(tid,tname,tcontent)
result=mtdal.insert(leixing)
if result>0:
return " 插入成功 <a href='/list'> 刷新 </a>"
else:
return " 插入失败 <a href='/list'> 刷新 </a>"

定义一个 API 接口

@app.route("/list")
def list(): tlist = mtdal.select()
list1=[]
for i in tlist:
dict1={}
dict1["tid"]=i[0]
dict1["tname"]=i[1]
dict1["tcontent"]=i[2]
dict1["tdate"]=i[3]
list1.append(dict1)
return jsonify(list1)

Postman****调试接口

Postman 是 Python API 接口开发的测试,没有前端的情况下使用
安装完,点击 Send an API request
get 步骤: 1. 设置请求方式, GET 请求 2. 输入接口地址 3. 点击发送请求 4. 查
看响应结果
post 步骤: 1. 设置请求方法 2. 设置接口 URL 地址 3. 设置请求头 4. 设置请求
数据 5. 点击
Send 发送请求 6. 查看响应数据 7. 查看响应体数据


OS 库

os ( operating system )是 Python 程序与操作系统进行交互的接口
1 、 os.listdir ()返回对应目录下的所有文件及文件夹
2 、 os.mkdir ()创建目录(只支持一层创建)即新建一个路径
3 、 os.open ( ) 创 建 文 件 相 当 于 全 局 函 数 open() ( IO 流 )
os.open("t.txt",os.O_CREAT)
4 、 os.remove (文件名或路径)删除文件
5 、 os.rmdir ()删除目录
6 、 os.system ()执行终端命令 os.system("touch a.txt") import os
os.mkdir("t")
os.open("tt.txt",os.O_CREAT)
os.rmdir("t")
os.remove("tt.txt")

终端操作

os.system("mkdir hello")

pandas

Pandas 是 Python 语言的一个扩展程序库,用于数据分析。
Pandas 名字衍生自术语 "panel data" (面板数据)
Pandas 可以从各种文件格式比如 CSV 、 JSON 、 Excel
python
终端输入安装 :
pip3 install -i
https://pypi.tuna.tsinghua.edu.cn/simple pandas

Pandas 数据结构 - Series

import pandas as pd
a = [1, 2, 3]
print(pd.Series(a))
sites = {"a": "Google", "b": "Runoob", 3: "Wiki"}
print(pd.Series(sites))
Pandas 数据结构 - DataFrame
data = [["Google",10],["Runoob",12],["Wiki",13]]
print(pd.DataFrame(data))
data

{"Site":["Google",
"Runoob",
"Wiki"],
"Age":[10,
12,
13],"sss":[22,33,44]} print(pd.DataFrame(data))

Pandas****处理数据方法

data = {"Site":["Google", "Runoob", "Wiki"], "Age":[10, 12,
13],"sss":[22,33,44]}
df = pd.DataFrame(data)
print(df.loc[1]) # 一行
print(df.loc[[0,1]]) # 多行
print(df["Age"]) # 一列
print(df[["Age","Site"]]) # 多列
print(df["Age"][1]) # 一个值
print(df[(df.Age>11) & (df.sss>35)])# 带条件筛选
print(df[(df.Age>11) | (df.sss>35)]["Age"])
print(df[(df.Age.astype(int)>11) & (df.sss>35)])# 如果需要转换数据
类型如下

修改值 - 查出来后,右侧给左侧赋值即可,不存在的列即为添加

df["Age"]=100
df["Age"][1]=99

添加列

df["typeid"]=2
df["Score"]=[90,40,99]
df.insert(1,"Sex",[" 男 "," 女 "," 男 "])

1 代表列 0 代表行

df.drop(1,axis=0,inplace=True)
df.drop([0,1],axis=0,inplace=True)
df.drop("Age",axis=1,inplace=True)
df.drop(df[df.Age>10].index,axis=0,inplace=True)

Pandas CSV****文件

CSV ( Comma-Separated Values ,逗号分隔值,有时也称为字符分隔值,因为
分隔字符
也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
import pandas as pd
df = pd.read_csv("/root/douban.csv")
print(df.to_string()) # 完整显示
df = df[["id","title","rate"]]
print(df)
df.to_csv("db.csv",index=False)

Pandas JSON

JSON ( JavaScript Object Notation , JavaScript 对象表示法),是存储
和交换文本信息
的语法,类似 XML 。
json.loads() 函数是将字符串转化为字典 一般 JSON 对象采用 {} 将键值对数据括起来,有时候会有多层 {}
也可以是 JSON 对象列表
import pandas as pd
d2 = [
{"class": "Year 1", "student number": 20, "room": "Yellow"},
{"class": "Year 2", "student number": 25, "room": "Blue"}
]
df = pd.DataFrame(d2)
print(df)
豆瓣的 txt 文件处理

内嵌的方法

import pandas as pd
import json
dict1=None
with open("douban.txt",mode="r",encoding="UTF-8") as f:
dict1 = json.loads(f.read())# 可以从文件读取过来
f.close()
df = pd.DataFrame(dict1["subjects"])
df["episodes_info"]="null"
df=df[["id","rate"]]# 改变顺序和列数
print(df)
df.to_csv("doubanout1.csv",index=False)

Pandas excel****文件

sheet_name 指定了读取 excel 里面的哪一个 sheet
usecols 指定了读取哪些列
nrows 指定了总共读取多少行
header 指定了列名在第几行,并且只读取这一行往下的数据
index_col 指定了 index 在第几列
engine="openpyxl" 指定了使用什么引擎来读取 excel 文件
安装: pip3 install openpyxl
import pandas as pd
df = pd.read_excel("student.xlsx",sheet_name="Sheet1",header=1)
print(df)
df.to_excel("student1.xlsx",sheet_name="xs",index=False)

上机练习 11

python 复制代码
import pandas as pd
import os
import json
import pymysql
# 1. 创建以日期为时间为名字的日志文件,格式如 20230303102030.log# os.system("nowaday='$(date +%Y%m%d%H%M%S)' && touch
/root/$nowaday.log")
# 2. 字典{1: "Google", 2: "Runoob", 3: "Wiki"},转成 series 数据,
打印数据,提
# 取"Runoob"打印
# sites = {"a": "Google", "b": "Runoob", 3: "Wiki"}
# print(pd.Series(sites))
# print(sites["b"])
# 3. 列表[["Google",10],["Runoob",12],["Wiki",13]],转成 DataFrame
数据打印
# data = [["Google",10],["Runoob",12],["Wiki",13]]
# print(pd.DataFrame(data))
# 4. 将[{"a": 1, "b": 2},{"a": 5, "b": 10, "c": 20}]转成 DataFrame
数据,提取第 2 行 a 那一列的
# 数据
# data = [{"a": 1, "b": 2},{"a": 5, "b": 10, "c": 20}]
# df=pd.DataFrame(data)
# print(df.loc[1,"a"])
# 5. 将 data = {"语文": [89,97,68,56,88,77],"数学":
[99,67,100,78,89,66],"英语":
# [73,57,89,90,82,55]}转成 DataFrame 数据,提取三科分数都及格的数据
# data = {"语文": [89,97,68,56,88,77],"数学":
[99,67,100,78,89,66],"英语":[73,57,89,90,82,55]}
# df=pd.DataFrame(data)
# for i in df.index:
#
if df.loc[i,"语文"]>=60 and df.loc[i,"数学"]>=60 and
df.loc[i,"英语"]>=60:
#
print(df.loc[i])
# 6. 使用 pandas 处理 douban.txt,提取列 id,title,rate,并且提取 rate
大于 7.5 的行导出
# douban1.csv,使用 os 库调用 shell 脚本 mysqlcsv.sh 自动导入
douban1.csv 到 mysql 数
# 据库,表名 douban1
# dict1=[]
# with open("/root/douban.txt", "r", encoding="utf-8") as f:
#
result=f.read()
#
dict1=json.loads(result)
#
f.close()
# df=pd.DataFrame(dict1["subjects"])
# df=df[df.rate.astype(float) > 7.5 ][["id","title","rate"]] #
改变顺序和列数
# print(df)
# df.to_csv("/root/douban1.csv",index=False,header=False)# os.system(" /root/shell/mysqlcsv.sh ")
# 7. 把 order.xlsx 使用 mobox 传入到/root/python 中,根据文档做如下操
作
# 把文档数据(从列名开始)转换为 dataframe 输出
# 在产品后面增加一列采购人,内容为 ["坤坤","杰杰","坤坤","丽丽","丽
丽","坤坤"]
# 查看金额大于 100 的坤坤的订单列表
# 查看金额大于 100 的坤坤的订单列表的产品及金额列
# 把上一步的结果另存为 order_kunkun.xlsx,表单名称为坤坤,不显示索引,
如下:
# 产品 金额
# 投影仪 2000
# 打印机 298
# df =
pd.read_excel("/root/python/order.xlsx",sheet_name="Sheet1",he
ader=1)
# print(df)
# df.insert(2,"采购人",["坤坤","杰杰","坤坤","丽丽","丽丽","坤坤
"])
# print(df[df["采购人"]=="坤坤"][ df["金额"]>100])
# df_kunkun = df[df["采购人"]=="坤坤" ][ df["金额"]>100][["产品","
金额"]]
#
df_kunkun.to_excel("order_kunkun.xlsx",sheet_name="xs",index=F
alse)
# mf=pd.read_excel("order_kunkun.xlsx",sheet_name="坤坤")
# print(mf)

爬虫

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
pip3 install urllib3==1.26.15
豆瓣网: https://movie.douban.com/
例子:排行榜 - 动画
爬取一条数据
数据包的 headers 里面有我们需要的所有数据
数据包的 response 里面有我们要传递的 json 数据
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71
Safari/537.36"}
url="https://movie.douban.com/j/chart/top_list"
params={"type":"25","interval_id":"100:90","action":"","start":
"0","limit":"1"} response=requests.get(url=url,headers=headers,params=params)
print(response.json())

爬取所有数据

刷新页面,一直往下滚动鼠标等待全部数据加载完成,共 147 条,修改参数的
limit 值即可

pandas****分析处理数据

把抓取的数据直接转换为 DataFrame 进行数据分析
这里处理并且添加自己想要的数据即可,此数据即为电影信息
类型为动漫类型,对应电影类型表 MovieType 的第二条数据
保存数据到文件 Movie.csv
content=response.json()
df=pd.DataFrame(content)
df=df[["id","title","release_date","score"]]
df["typeid"]=2
df.to_csv("/root/python/movie.csv",index=False)

导入到****mysql

电影表 ( 编号 , 电影名称 , 上映时间 , 分数 , 电影类型编号 )
Movie(id,title,release_date,score,typeid)
os&shell 全自动导入 csv 文件到数据库
os.system("cp
/root/python/Movie.csv
/usr/local/mysql/data/Movie.csv")
os.system("/root/shell/mysqlcsv.sh
Movie
/usr/local/mysql/data/Movie.csv")
select * from Movie where typeid=2

上机练习12---使用爬虫+pandas+os获取处理导入数据

(这回是爬真的豆瓣电影!)
导入两种电影类型的电影到 mysql 数据库中,如:
豆瓣排行榜 - 动画 -mysql 数据效果如下:

Pa.py: ( python 爬取部分)

python 复制代码
import requests
import pandas as pd
import os
# 伪装网站
headers1={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71
Safari/537.36"}
url1="https://movie.douban.com/j/chart/top_list" #爬取网页
# 爬取参数
params1={"type":"25","interval_id":"100:90","action":"","start
":"0","limit":"20"}
response=requests.get(url=url1,headers=headers1,params=params1
)
# 获得前 20 个电影的 json 数据
GetData=response.json()
# print(GetData)
print("爬取中......")
# 将后续电影的 json 数据追加到 GetData 中
while True:
params1["start"]=str(int(params1["start"])+20)
response=requests.get(url=url1,headers=headers1,params=para
ms1)NewData=response.json()
if NewData!=[]:
GetData+=NewData
# print(GetData)
print("爬取中......")
else:
break
print("数据爬取完毕,开始解析数据......")
for i in GetData:
i["rating"]=i["rating"][1]
# 数据存入 excel 文件
print("正在更新 excel 文件......")
DisposalData=pd.DataFrame(GetData)[["id","title","release_date
","score","rating"]]
DisposalData.to_csv("/root/python/WedDouban/reallydouban.csv",
index=False,header=False,encoding="utf-8")
# 存入数据库
print("正在更新数据库......")
os.system("cp /root/python/WedDouban/reallydouban.csv
/usr/local/mysql/data/")
os.system(" /root/python/WedDouban/doubancsv.sh")

doubancsv.sh:(shell 写导入数据库部分 )

bash 复制代码
host="127.0.0.1"
port="3306"
user="root"
passwd="root123456"
dbname="test"
# 编写 shell 脚本/root/shell/mysqlcsv.sh
# 1.如果 douban 表存在则删除
mysql1="drop table if exists DoubanMovieType"
mysql -h$host -P$port -u$user -p$passwd $dbname -e "$mysql1"
# 2.如果 douban 表不存在则新建
mysql2="
create table if not exists DoubanMovieType(
id varchar(20) primary key,
title varchar(20),
release_date varchar(50),
score varchar(20),rating varchar(40)
)"
mysql -h$host -P$port -u$user -p$passwd $dbname -e "$mysql2"
# # 3.导入 douban.csv 数据到 douban 表中,建表过程为根据导入的 csv 文件
自动创建表
mysql3="LOAD DATA INFILE
'/usr/local/mysql/data/reallydouban.csv' INTO TABLE
DoubanMovieType
CHARACTER SET utf8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES"
mysql -h$host -P$port -u$user -p$passwd $dbname -e "$mysql3"
# # 4.查询 douban 表验证结果
# mysql4="select * from douban1"
# mysql -h$host -P$port -u$user -p$passwd $dbname -e "$mysql4"

代码量不大,但是爬取的数据不好清洗,太多了,加上今天的知识点很多还没记
住,钻研了好久。
最后数据库中得到的表:

相关推荐
大翻哥哥1 小时前
Python 2025:量化金融与智能交易的新纪元
开发语言·python·金融
qq_508823401 小时前
金融量化指标--2Alpha 阿尔法
大数据·人工智能
好家伙VCC2 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
zhousenshan2 小时前
Python爬虫常用框架
开发语言·爬虫·python
茯苓gao2 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾2 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
IMER SIMPLE3 小时前
人工智能-python-深度学习-经典神经网络AlexNet
人工智能·python·深度学习
CodeCraft Studio3 小时前
国产化Word处理组件Spire.DOC教程:使用 Python 将 Markdown 转换为 HTML 的详细教程
python·html·word·markdown·国产化·spire.doc·文档格式转换
DKPT3 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa3 小时前
HTML和CSS学习
前端·css·学习·html