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

news2024/9/21 2:37:40

目录

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

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 爬取部分)
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 写导入数据库部分 )
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"
代码量不大,但是爬取的数据不好清洗,太多了,加上今天的知识点很多还没记
住,钻研了好久。
最后数据库中得到的表:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1990704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu 24.04 LTS安装elasticsearch-8.14.3+Kibana

1.安装Elasticsearch 1.1 下载Elasticsearch # 1. 更新包索引 sudo apt update# 2. 升级已安装的软件包 sudo apt upgrade -y# 3. 进入 /opt 目录 cd /opt# 4. 下载Elasticsearch压缩包 sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.…

国产化飞腾D2000独显可插拔式OPS电脑主板,应用于信创教育、信创会议、信创办公等领域

国产化飞腾D2000 主板规格书 产品概述 XM-F611是我司自主研发设计的一款独显可插拔式OPS电脑主板&#xff0c;符合Intel OPS(Open Pluggable Specification)标准规范。采用飞腾腾锐D2000八核处理器加国产独立显卡&#xff0c;搭配国产银河麒麟或统信操作系统&#xff0c;能够…

sparkhive--练习2

需求&#xff1a; 在hive中创建对应表&#xff0c;并且导入数据&#xff0c;使用spark完成对应的查询 stu_name course score 张三 语文 98 张三 数学 95 张三 英语 89 李四 语文 97 李四 数学…

【天数计算】输入某年某月某日,判断这一天是这一年的第几天

要求&#xff1a;输入某年某月某日&#xff0c;判断这一天是这一年的第几天&#xff0c;使用C语言实现 #include<stdio.h>int dayYear(int year,int month,int day){int days_in_month[] {0,31,28,31,30,31,30,31,31,30,31,30,31};int i,days0;for(i1;i<month;i){da…

分类预测|基于粒子群优化核极限学习机的Adaboost集成模型数据分类预测Matlab程序 PSO-KELM-Adaboost

分类预测|基于粒子群优化核极限学习机的Adaboost集成模型数据分类预测Matlab程序 PSO-KELM-Adaboost 文章目录 前言分类预测|基于粒子群优化核极限学习机的Adaboost集成模型数据分类预测Matlab程序 PSO-KELM-Adaboost 一、PSO-KELM-Adaboost模型1. 核化极限学习机 (KELM)2. 粒子…

5G边缘计算网关应用

在信息技术浪潮的推动下&#xff0c;5G网络与边缘计算的结合正快速地推动着人们步入一个前所未有的智能生活新纪元。5G边缘计算网关作为两者融合的重要枢纽&#xff0c;其应用领域的拓展和优势表现越来越受到企业和行业的重视。      5G边缘计算网关的技术背景   5G网络为…

WEB应用(十三)---RCE

什么是RCE&#xff1f; Remote Command/Code Execute&#xff0c;远程命令或代码执行。通过构造特殊的字符串&#xff0c;将数据提交至Web应用程序&#xff0c;并利用该方式执行外部程序或系统命令实施攻击&#xff0c;类似于SQL注入。 Web应用程序使用了一些可以执行系统命令或…

多变量时间序列生成模型GAN介绍与实现

目录 1. 模型介绍2. 问题提出3. 模型具体实现3.1 数据预处理3.2 生成对抗网络&#xff08;GAN&#xff09;结构3.3 模式崩溃解决3.4 合成数据验证 4. 代码实现参考文献 1. 模型介绍 在大数据时代&#xff0c;生成逼真的时间序列数据对于负载平衡、负载预测和智能资源配置等方面…

openwrt 性能工具perf和cpu占用查看工具sysstat编译及使用

代码使用的lean源码&#xff0c;只需要用make menuconfig打开perf对应的编译选项即可 1.第一步选择Global build settings 2.第二步选择Kernel build options 3.第三步选择Enable kernel cgroups 4.第四步选择Enable perf_event per-cpu per-container group (cgroup) monitor…

计算机网络-CSP初赛知识点整理

历年真题 [2016-NOIP-普及-第3题] 以下不属于无线通信技术的是( ) A. 蓝牙 B. Wifi C. GPRS D. 以太网 [2015-NOIP-普及-第10题] FTP 可以用于( )。 A. 远程传输文件 B. 发送电子邮件 C. 浏览网页 D. 网上聊天 [2019-CSP-J-第1题] 中国的国家顶级域名是( ). A. .cn B. .ch C.…

国内自闭症学校指南:了解孩子的康复需求和解决方案

在国内&#xff0c;自闭症儿童的数量逐年增加&#xff0c;为他们提供专业的教育和康复支持变得至关重要。对于家长来说&#xff0c;选择一所合适的自闭症学校是帮助孩子走向康复的关键一步。在众多的选择中&#xff0c;星贝育园以其独特的优势和全面的服务脱颖而出。 当孩子被诊…

android系统中data下的xml乱码无法查看问题剖析及解决方法

背景&#xff1a; Android12高版本以后系统生成的很多data路径下的xml都变成了二进制类型&#xff0c;根本没办法看xml的内容具体如下&#xff1a; 比如想要看当前系统的widget的相关数据 ./system/users/0/appwidgets.xml 以前老版本都是可以直接看的&#xff0c;这些syste…

Cxx primer-chap13-Copy Control

copy控制涉及类的五个成员函数&#xff1a;&#xff0c;这五个成员函数被显式或隐式的被调用&#xff0c;各司其职&#xff1a;我们必须根据类的实际情况来确定是否需要显式定义这些成员函数&#xff1a;什么是拷贝构造函数呢&#xff1f;简单讲就是该函数的第一个形参是refere…

malloc函数与free函数

目录 开头1.怎样把数组初始化时的项数变成变量?malloc函数free函数 2.malloc函数与free函数的实际运用CC6 牛牛的排序随机乱码打印随机数组打印 结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们来学一下如何把数组初始化时的项数变成变量的一些知识。 1.怎…

【书生大模型实战营第三期 | 入门岛第3关-Git 基础知识】

学习Git版本控制系统心得体会 摘要 通过参与InternLM Git教程&#xff0c;我对Git这一开源的分布式版本控制系统有了更深入的理解和实践。Git以其高效的团队协作能力、详尽的代码历史记录以及灵活的分支管理功能&#xff0c;成为软件开发中不可或缺的工具。 文章大纲 Git简介…

自查出癌症后 凯特王妃的生活观发生了变化 王室的粉丝们也应该会很少见到她

凯特米德尔顿今年的健康问题令人意外,这也改变了王室的面貌。这位威尔士王妃每次露面都引来巨大关注,因此王室不得不发挥创意,将更多精力放在威廉王子、索菲、爱丁堡公爵夫人,甚至查理三世国王的社交日程上。王室粉丝们可能期待着凯特恢复健康,恢复正常日程,但内部人士称…

unity 粒子系统学习

差不多了解了基本的ui面板&#xff0c;学一下粒子系统 取消轮廓线 这样粒子biubiu的时候就没有橙黄色的轮廓线了

lvs的dr模式实现

目录 一、实验环境准备 1、五台红帽9系统的主机 2、关闭所有的防火墙以及关闭selinux 二、在lvs中配置 1、在lvs中安装lvs软件并设置开机启动 2、在lvs中打开内核路由功能&#xff0c;并把它写入/etc/sysctl.conf文件中 3、webserver1和webserver2下载httpd 4、在lvs主机…

【Redis进阶】Redis单线程模型和多线程模型

目录 单线程 为什么Redis是单线程 处文件事件理器的结构 文件处理器的工作流程 总结 文件事件处理器 连接应答处理器 命令请求处理器 命令回复处理器 多线程 为什么引入多线程 多线程架构 多线程执行流程 关于Redis的问题 Redis为什么采用单线程模型 Redis为什…

【STM32】USART串口和I2C通信

个人主页~ USART串口和I2C通信 USART串口一、串口1、简介2、电路要求3、参数及时序 二、USART外设1、USART结构2、波特率发生器 三、数据包1、HEX数据包HEX数据包接收 2、文本数据包文本数据包接收 I2C通信一、简介二、通信协议1、硬件电路2、I2C时序基本单元 三、I2C外设1、简…