当前位置:   article > 正文

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

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

目录

Python API 接口开发用法介绍

Postman 调试接口

OS 库

pandas

Pandas 数据结构 - Series

Pandas 处理数据方法

Pandas CSV 文件

Pandas JSON

Pandas excel 文件

上机练习 11

爬虫

爬取所有数据

pandas 分析处理数据

导入到 mysql

上机练习 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

  1. import pandas as pd
  2. import os
  3. import json
  4. import pymysql
  5. # 1. 创建以日期为时间为名字的日志文件,格式如 20230303102030.log# os.system("nowaday='$(date +%Y%m%d%H%M%S)' && touch
  6. /root/$nowaday.log")
  7. # 2. 字典{1: "Google", 2: "Runoob", 3: "Wiki"},转成 series 数据,
  8. 打印数据,提
  9. # 取"Runoob"打印
  10. # sites = {"a": "Google", "b": "Runoob", 3: "Wiki"}
  11. # print(pd.Series(sites))
  12. # print(sites["b"])
  13. # 3. 列表[["Google",10],["Runoob",12],["Wiki",13]],转成 DataFrame
  14. 数据打印
  15. # data = [["Google",10],["Runoob",12],["Wiki",13]]
  16. # print(pd.DataFrame(data))
  17. # 4. 将[{"a": 1, "b": 2},{"a": 5, "b": 10, "c": 20}]转成 DataFrame
  18. 数据,提取第 2 行 a 那一列的
  19. # 数据
  20. # data = [{"a": 1, "b": 2},{"a": 5, "b": 10, "c": 20}]
  21. # df=pd.DataFrame(data)
  22. # print(df.loc[1,"a"])
  23. # 5. 将 data = {"语文": [89,97,68,56,88,77],"数学":
  24. [99,67,100,78,89,66],"英语":
  25. # [73,57,89,90,82,55]}转成 DataFrame 数据,提取三科分数都及格的数据
  26. # data = {"语文": [89,97,68,56,88,77],"数学":
  27. [99,67,100,78,89,66],"英语":[73,57,89,90,82,55]}
  28. # df=pd.DataFrame(data)
  29. # for i in df.index:
  30. #
  31. if df.loc[i,"语文"]>=60 and df.loc[i,"数学"]>=60 and
  32. df.loc[i,"英语"]>=60:
  33. #
  34. print(df.loc[i])
  35. # 6. 使用 pandas 处理 douban.txt,提取列 id,title,rate,并且提取 rate
  36. 大于 7.5 的行导出
  37. # douban1.csv,使用 os 库调用 shell 脚本 mysqlcsv.sh 自动导入
  38. douban1.csv 到 mysql 数
  39. # 据库,表名 douban1
  40. # dict1=[]
  41. # with open("/root/douban.txt", "r", encoding="utf-8") as f:
  42. #
  43. result=f.read()
  44. #
  45. dict1=json.loads(result)
  46. #
  47. f.close()
  48. # df=pd.DataFrame(dict1["subjects"])
  49. # df=df[df.rate.astype(float) > 7.5 ][["id","title","rate"]] #
  50. 改变顺序和列数
  51. # print(df)
  52. # df.to_csv("/root/douban1.csv",index=False,header=False)# os.system(" /root/shell/mysqlcsv.sh ")
  53. # 7. 把 order.xlsx 使用 mobox 传入到/root/python 中,根据文档做如下操
  54. # 把文档数据(从列名开始)转换为 dataframe 输出
  55. # 在产品后面增加一列采购人,内容为 ["坤坤","杰杰","坤坤","丽丽","
  56. ","坤坤"]
  57. # 查看金额大于 100 的坤坤的订单列表
  58. # 查看金额大于 100 的坤坤的订单列表的产品及金额列
  59. # 把上一步的结果另存为 order_kunkun.xlsx,表单名称为坤坤,不显示索引,
  60. 如下:
  61. # 产品 金额
  62. # 投影仪 2000
  63. # 打印机 298
  64. # df =
  65. pd.read_excel("/root/python/order.xlsx",sheet_name="Sheet1",he
  66. ader=1)
  67. # print(df)
  68. # df.insert(2,"采购人",["坤坤","杰杰","坤坤","丽丽","丽丽","坤坤
  69. "])
  70. # print(df[df["采购人"]=="坤坤"][ df["金额"]>100])
  71. # df_kunkun = df[df["采购人"]=="坤坤" ][ df["金额"]>100][["产品","
  72. 金额"]]
  73. #
  74. df_kunkun.to_excel("order_kunkun.xlsx",sheet_name="xs",index=F
  75. alse)
  76. # mf=pd.read_excel("order_kunkun.xlsx",sheet_name="坤坤")
  77. # 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 爬取部分)
  1. import requests
  2. import pandas as pd
  3. import os
  4. # 伪装网站
  5. headers1={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)
  6. AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71
  7. Safari/537.36"}
  8. url1="https://movie.douban.com/j/chart/top_list" #爬取网页
  9. # 爬取参数
  10. params1={"type":"25","interval_id":"100:90","action":"","start
  11. ":"0","limit":"20"}
  12. response=requests.get(url=url1,headers=headers1,params=params1
  13. )
  14. # 获得前 20 个电影的 json 数据
  15. GetData=response.json()
  16. # print(GetData)
  17. print("爬取中......")
  18. # 将后续电影的 json 数据追加到 GetData 中
  19. while True:
  20. params1["start"]=str(int(params1["start"])+20)
  21. response=requests.get(url=url1,headers=headers1,params=para
  22. ms1)NewData=response.json()
  23. if NewData!=[]:
  24. GetData+=NewData
  25. # print(GetData)
  26. print("爬取中......")
  27. else:
  28. break
  29. print("数据爬取完毕,开始解析数据......")
  30. for i in GetData:
  31. i["rating"]=i["rating"][1]
  32. # 数据存入 excel 文件
  33. print("正在更新 excel 文件......")
  34. DisposalData=pd.DataFrame(GetData)[["id","title","release_date
  35. ","score","rating"]]
  36. DisposalData.to_csv("/root/python/WedDouban/reallydouban.csv",
  37. index=False,header=False,encoding="utf-8")
  38. # 存入数据库
  39. print("正在更新数据库......")
  40. os.system("cp /root/python/WedDouban/reallydouban.csv
  41. /usr/local/mysql/data/")
  42. os.system(" /root/python/WedDouban/doubancsv.sh")
doubancsv.sh:(shell 写导入数据库部分 )
  1. host="127.0.0.1"
  2. port="3306"
  3. user="root"
  4. passwd="root123456"
  5. dbname="test"
  6. # 编写 shell 脚本/root/shell/mysqlcsv.sh
  7. # 1.如果 douban 表存在则删除
  8. mysql1="drop table if exists DoubanMovieType"
  9. mysql -h$host -P$port -u$user -p$passwd $dbname -e "$mysql1"
  10. # 2.如果 douban 表不存在则新建
  11. mysql2="
  12. create table if not exists DoubanMovieType(
  13. id varchar(20) primary key,
  14. title varchar(20),
  15. release_date varchar(50),
  16. score varchar(20),rating varchar(40)
  17. )"
  18. mysql -h$host -P$port -u$user -p$passwd $dbname -e "$mysql2"
  19. # # 3.导入 douban.csv 数据到 douban 表中,建表过程为根据导入的 csv 文件
  20. 自动创建表
  21. mysql3="LOAD DATA INFILE
  22. '/usr/local/mysql/data/reallydouban.csv' INTO TABLE
  23. DoubanMovieType
  24. CHARACTER SET utf8
  25. FIELDS TERMINATED BY ','
  26. LINES TERMINATED BY '\n'
  27. IGNORE 1 LINES"
  28. mysql -h$host -P$port -u$user -p$passwd $dbname -e "$mysql3"
  29. # # 4.查询 douban 表验证结果
  30. # mysql4="select * from douban1"
  31. # mysql -h$host -P$port -u$user -p$passwd $dbname -e "$mysql4"
代码量不大,但是爬取的数据不好清洗,太多了,加上今天的知识点很多还没记
住,钻研了好久。
最后数据库中得到的表:
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/948161
推荐阅读
相关标签
  

闽ICP备14008679号