1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 入门教程:Python tk+stats+requests(GUI界面+机器学习+网络爬虫)

入门教程:Python tk+stats+requests(GUI界面+机器学习+网络爬虫)

时间:2020-07-13 07:30:37

相关推荐

入门教程:Python tk+stats+requests(GUI界面+机器学习+网络爬虫)

目录

人工智能-机器学习的简单应用Python-tkinter的应用主背景创建1.窗口创建2.窗口尺寸和位置3.窗口标题 元素创建元素放置元素相关函数1.改变文字2.绑定函数3.主函数4.tk自带函数 简易机器学习的使用简单的网络文字爬虫代码总结1.main.py2.stats.py3.search.py4.image.py 文章总结感谢阅读!

人工智能-机器学习的简单应用

机器学习嘛,老朋友了.正好最近学校里要求写了个人工智能的小项目,就顺手发出来,正好记录下python ttk的用法.

Python-tkinter的应用

tkinter是Python内置的可视化包.不同于wxPython,它具有更好的适用性和多线程兼容.本文仅对其进行简单介绍,不做深入探究.

主背景创建

1.窗口创建

和大多数可视化包一样,tkinter(下文简称tk)需要先创建窗口才能在上面加入元素,如:

import tkinter as tkimport tkinter.ttk as ttkroot=tk.Tk()

2.窗口尺寸和位置

在窗口创建完成后就可以调整它的大小(单位px)和左上角初始位置(相对屏幕左上角,单位px)啦:

root.geometry("800x600+0+0")#第一个参数为窗口长度,第二个参数为高度#第三个参数为初始位置距屏幕左上角水平距离,第四个参数为竖直距离

3.窗口标题

窗口有了,其标题当然不能落下:

root.title("我是标题")

元素创建

tk中每一个对象都是tk或ttk(即tkinter.ttk)的一个类的对象.一般常用的对象有:

通过直接应用类就可以创建对象,如:

label=ttk.Label(root,text="我是label")entry=ttk.Entry(root)scale=tk.Scale(root,from_=0,to=10,orient="horizontal")

值得注意的是,菜单栏应用方式比较特殊,需要如下代码:

menubar=tk.Menu(root)filemenu=tk.Menu(menubar,tearoff=0)menubar.add_cascade(label="项目...",menu=filemenu)filemenu.add_command(label="label1",command=do1),filemenu.add_command(label="label2",command=do2),filemenu.add_command(label="label3",command=do3)

其中,menubar对象创建的是整个菜单条;filemenumenubar上每一条主栏目;add_cascade函数直接作用在menubar上是为了创建一个主栏目(这样filemenu的索引0就对应了这个label="项目..."的主栏目);而add_command作用在filemenu上,用于创建子栏目.

元素放置

创建好了元素,就需要将它们放置在窗口root上,一般有两种办法:

一是pack方法;二是place方法.pack不能指定位置,由tk自动安置,一般都是在上一个被pack的元素下方,居中;place则可以自己选择位置,语法如下:

label.pack()entry.pack()scale.place(x=100,y=50)

效果图:

元素相关函数

1.改变文字

在创建文本对象(如Label,Button等)时已经给定了初始文本text,那要如何后期修改呢?分情况:

Button对象文本修改

 对于大多数对象而言,只需要修改其属性之一就可以更改文本,这里以button举例:

button["text"]="new_text"

这样button上就有了新文本: “new_text”.

Label对象文本修改

Label对象除窗口外一般不设有其他属性,而python中不允许修改根属性,这意味着我们不能像button那样简单的只是修改text属性,而是利用重写函数config来操作:

label.config(text="new text")

2.绑定函数

在上一节中提到了ButtonEntry对象的绑定函数,现在让我们来讲讲什么是绑定函数.

第一种写法:

button=ttk.Button(root,text="我是button",command=doSome)

此时,只有当button被按下时才会且仅会触发一次doSome函数.

第二种写法:

button=ttk.Button(root,text="我是button",command=doSome())

此时,无论是否按下,在root窗口被创建之前会先执行一次doSome函数,随后启动窗口.在窗口中,button被按下时会调用两次doSome函数,因此这种写法是不建议的.

3.主函数

在所有元素和对象方法创建后,就可以启动程序了!只需要这样:

root.mainloop()

即可启动窗口root及其对象/方法.

4.tk自带函数
空字符串

对于用惯了"“的程序员,到这可得改一改了.在大量数据读取期间,”"要占用较多的内存,此时可采用

value=tk.Stringvar()

这样一来,value变量的所耗内存就变小了.

关闭窗口

在一个窗口的任务结束后,需要关闭它来结束它的mainloop以启动下一个窗口,此时需要调用关闭窗口函数:

root.destroy()

消息弹窗

运用好小窗口可以有利地节省主窗口root上的空间.小窗口需要引入包

import tkinter.messagebox as msg

共有八种函数,每种传入两个内容:小窗标题和小窗文本.

msg.showinfo("info","text1")#无返回值msg.showwarning("warn","text2")#无返回值msg.showerror("errr","text3")#无返回值msg.askquestion("ques","?")#两个选项(yes/no) 返回True/Falsemsg.oknocancel("oncl","ok/no/cancel")#三个选项 返回"ok"/"no"/"cancel"msg.askyesno("yn?","yes/no")#两个选项(yes/no) 返回"yes"/"no"msg.askyenocancel("yncc","yes/no/cancel")#三个选项 返回"yes"/"no"/"cancel"msg.askretrycancel("rcr","retry/cancel")#两个选项 返回"retry"/"cancel"

获取函数

entryscale中获取返回值,可用:

result=entry.get()

entry返回字符串,scale返回float.

简易机器学习的使用

受到篇幅限制,本文只讲述一下python包statsmodels.api的简单应用.

安装>>>pip install statsmodels

导入:

import statsmodels.api as smimport numpy as npimport pandas as pd

假定现在有这样一个csv文件(以DataFrame形式表现):

(特征组可视为 x x x值,目标组可视为 y y y值)

一眼就看出来了吧?这显然是函数 y = 5 x y=5x y=5x对吧?那如何让机器知道它呢?我们将这个"eg1.csv"读出并制作为两个list:

la=pd.read_csv(path,usecols=['特征组'] )lb=pd.read_csv(path,usecols=["目标组"]) X=list(la["特征组"])Y=list(lb["目标组"])

然后运用一系列迷惑操作:

dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.sin(X),np.tan(X),np.cos(X) ))#第一步X_added=sm.add_constant(dX)#第二步model=sm.OLS(Y,X_added)#第三步results=model.fit() #第四步

注意!

第一步中,我们尚未应用到模型,而是使用numpy的数组大量操作column_stack来分别取得对于每一个 x x x分别的 x , x 2 , x 3 , x 4 , sin ⁡ x , tan ⁡ x , cos ⁡ x x,x^2,x^3,x^4,\sin{x},\tan{x},\cos{x} x,x2,x3,x4,sinx,tanx,cosx的值.

第二步中,我们应用statsmodels.api提供的浅层机器学习,分别计算 x , x 2 , x 3 , x 4 , sin ⁡ x , tan ⁡ x , cos ⁡ x x,x^2,x^3,x^4,\sin{x},\tan{x},\cos{x} x,x2,x3,x4,sinx,tanx,cosx在对应的 y = f x y=f{x} y=fx中所占权重,返回array形式,包含每一项的权重 ω n \omega_n ωn​,表达式为

对于 ∀ x ∈ X , \forall x\in X, ∀x∈X, ω 1 x + ω 2 x 2 + ω 3 x 3 + ω 4 x 4 + ω 5 sin ⁡ x + ω 6 tan ⁡ x + ω 7 cos ⁡ x = y = f ( x ) ∈ Y \omega_1x+\omega_2x^2+\omega_3x^3+\omega_4x^4+\omega_5\sin{x}+\omega_6\tan{x}+\omega_7\cos{x}=y=f(x)\in Y ω1​x+ω2​x2+ω3​x3+ω4​x4+ω5​sinx+ω6​tanx+ω7​cosx=y=f(x)∈Y.

这也意味这你可以在第一步中添加或删除或更改值栈,如更改成:

dX=np.column_stack((X,\np.power(X,2),np.power(X,3),np.power(X,4),\np.sin(X),np.tan(X),np.cos(X),\np.power(np.sin(X),2),np.power(np.cos(X),2),\np.power(2,np.sin(np.arccos(X)))))

注意括号数量对应.

第三步第四步中,我们将计算好的权重组返回到机器,获取培养模型.

因此这个results就是我们培养的学习模型.

对于其精度,一般采用方差:

jd=results.rsquared()print(jd*100)

对于一个需要预测的特征组数 x x x,我们直接套用函数

prediction=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.sin(x),np.tan(x),np.cos(x)])

注意,predict函数的实参为一个列表,内容应当与constant模型的基础元组内容完全一致.

简单的网络文字爬虫

通过对百度百科主站的探究发现,对于一个搜索词(以"python")举例,其词条位于python,网站格式:

/item/Python/{key}?fromModule=lemma_search-box)

而如果不给定keyfromModule值,只访问

/item/Python/

发现也可以访问.那思路就清晰了,直接用requests获取该网页所有内容就好了:

text="Python"url = "/item/"+i r = requests.get(url) html_code = r.content.decode(r.encoding)

这个html_code就是网页上所有内容.假定我们现在只要获取词条的简要介绍,会发现位于html_code的第11行,因此我们可以简化思路,将它写入文本文件后再读出取index=[10]即可:

with open("new.txt","w",encoding="utf-8") as h:h.write(str(hc))with open("new.txt","r",encoding="utf-8") as n:real=n.readlines()get=real[10] text=get[34:-3]os.remove("new.txt")

此时text就是我们想要的文本了.

代码总结

在结束本文之前,附上本次我期末项目的全代码:

1.main.py

#-*- utf-8 -*-import tkinter as tkimport tkinter.ttk as ttkfrom tkinter import filedialog as fdimport tkinter.messagebox as msgimport timeimport sys import statsimport imageimport searchimport base64from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipherfrom Crypto.PublicKey import RSAdef get_key(path):with open(path) as f:pem_data = f.read()return RSA.importKey(pem_data)def encrypt(msg, pub_path):key = get_key(pub_path)cipher = PKCS1_cipher.new(key)encrypt_msg = cipher.encrypt(msg.encode("utf-8"))return base64.b64encode(encrypt_msg).decode()def decrypt(msg, pri_path):key = get_key(pri_path)cipher = PKCS1_cipher.new(key)decrypt_data = cipher.decrypt(base64.b64decode(msg), 0)return decrypt_data.decode("utf-8") with open("uap.log",mode="r",encoding="utf-8") as s:n=s.readlines()if len(n)!=0 and len(n)!=2 and len(n)!=4:print("注册表被篡改,无法打开程序.")time.sleep(3)sys.exit()root=tk.Tk()root.geometry("800x600+0+0") root.title("登录")x=150label0=ttk.Label(root,text="用户名:");label0.place(x=x,y=20)entry0=ttk.Entry(root);entry0.place(x=x+50,y=20)label_1=ttk.Label(root,text="密码:");label_1.place(x=x+220,y=20)entry_1=ttk.Entry(root,show="*");entry_1.place(x=x+270,y=20) IF=False#第二部分 登录def g():global entry0,entry_1,IF,label0,label_1,q username=entry0.get()password=entry_1.get()with open("uap.log",mode="r",encoding="utf-8") as uap:try:an=uap.readlines()anu=an[0].replace("\n","")anp=an[1].replace("\n","")anu=decrypt(anu,"pri_key.pem")anp=decrypt(anp,"pri_key.pem") except:anu=anp="" try:bnu=an[2].replace("\n","");bnp=an[3].replace("\n","")bnu=decrypt(anu,"pri_key.pem");bnp=decrypt(anp,"pri_key.pem")except:bnu=anu;bnp=anpif (username==anu and password==anp) or (username==bnu and password==bnp): IF=Trueroot.destroy() else:q.config(width=25)q.place(x=200,y=50)q["text"]="用户名或密码不正确!(点击重试)" #第三部分 注册 def zc():global entry0,entry_1,IF,label0,label_1,q username=entry0.get()password=entry_1.get()with open("uap.log",mode="r",encoding="utf-8") as uap:try:an=uap.readlines()anu=an[0].replace("\n","")anp=an[1].replace("\n","") anu=decrypt(anu,"pri_key.pem")anp=decrypt(anp,"pri_key.pem")except:anu=anp="" try:bnu=an[2].replace("\n","");bnp=an[3].replace("\n","")bnu=decrypt(anu,"pri_key.pem");bnp=decrypt(anp,"pri_key.pem")except:bnu="";bnp=""if username==anu or username==bnu or password==anp or password==bnp: z.config(width=40)z.place(x=220,y=80)z["text"]="该用户已经存在或有输入为空.请重新注册.(再次点击)"else:if len(an)==2:with open("uap.log",mode="a",encoding="utf-8") as u1:us=encrypt(username,"pub_key.pem")ps=encrypt(password,"pub_key.pem")u1.write("\n"+us)u1.write("\n"+ps)z.config(width=25)z.place(x=230,y=80)z["text"]="注册成功!"time.sleep(3)IF=Trueroot.destroy() elif len(an)==0:with open("uap.log",mode="a",encoding="utf-8") as u1:us=encrypt(username,"pub_key.pem")ps=encrypt(password,"pub_key.pem")u1.write(us)u1.write("\n"+ps)z.config(width=25)z.place(x=230,y=80)z["text"]="注册成功!"time.sleep(3)IF=Trueroot.destroy()else:z["text"]="已有两个账号.请前往uap.log删除." q = ttk.Button(root, text="确定并进入", command=g);q.place(x=250,y=50)z = ttk.Button(root, text="注册新账号",command=zc);z.place(x=320,y=80)out = ttk.Button(root,text="退出",command=sys.exit);out.place(x=400,y=50) root.mainloop() del roottry:if IF: local1=local2=input1=input2=""mode=0QD=Falsedef make ():global entry2,local1,local2,butto1,QD,input1,input2,mode,scale1 try:input1=local1.nameexcept:input1=""try:input2=local2.nameinput2=input2.replace("\\","/")except:try:input2=entry2.get()except:input2=""if mode==1: try:modei=scale1.get()r1,r2=stats.st(input1,float(input2),modei)msg.showinfo("结果","%s\n返回值:%s"%(r1,r2))except Exception as e:msg.showerror("错误","%s"%e) elif mode==2:try:reslut1,reslut2=image.get(input1)result=""for i in range(0,len(reslut1)):result=result+reslut1[i]+" (自信度:"+str((reslut2[i])*100)+"%)\n"msg.showinfo("结果","返回值:\n%s"%result)except Exception as e:msg.showerror("错误","%s"%e)elif mode==3: try:re=search.search(input2)re=re[0]r=[]end=""if len(re)>=129:key=[]for i in range(0,len(re) ):p=re[i]if p=="。" or p==".":key.append(i)for j in re: r.append(j)for m in range(key[-1],len(re)-key[-1]+1):del r[m+1]for n in r: end=end+str(n) re=end if re=="":msg.showwarning("警告","从百度百科上未找到该词条.请重试.")else:msg.showinfo("结果","搜索结果:%s"%re)except Exception as e:msg.showerror("错误","%s"%e)def iget1(): global local1local1=fd.askopenfile(title="打开...",filetypes=[("数据存储文件",["*.txt","*.csv","*.log","*.img","*.png","*.jpg","*.jpeg","*.html","*.m3u8"])]) def iget2(): global local2local2=fd.askopenfile(title="打开...",filetypes=[("数据存储文件",["*.txt","*.csv","*.log"])])def do1():global mode,label_statusmode=1 label_status.config(text="当前项目:一维数组映射分析")def do2():global mode,label_statusmode=2 label_status.config(text="当前项目:图像识别")def do3():global mode,label_statusmode=3 label_status.config(text="当前项目:简易分句和搜索" ) root=tk.Tk()root.geometry("800x600+0+0")root.title("Python人工智能项目")menubar=tk.Menu(root)filemenu=tk.Menu(menubar,tearoff=0)menubar.add_cascade(label="项目...",menu=filemenu)filemenu.add_command(label="一维数组映射分析",command=do1),filemenu.add_command(label="图像识别",command=do2),filemenu.add_command(label="简易分句和搜索",command=do3)root.config(menu=menubar) pw=tk.PanedWindow(root,orient="vertical",sashrelief="sunken")pw.pack(fill="both",expand=1) separator = ttk.Separator(root).pack(padx=2, fill='x')status_frame = ttk.Frame(root, relief='raised').pack(fill='x')label_status = ttk.Label(status_frame, text='当前项目:无')label_status.pack(side='left', fill='x')sizegrip = ttk.Sizegrip(status_frame).pack(anchor='ne') pw1=tk.PanedWindow(root,orient="vertical",sashrelief="flat") pw.add(pw1) label1=ttk.Label(pw1,text="数据一路径:(在模式1和2中必选,模式3中不可选)")butto_1=ttk.Button(pw1,text="打开...",command=iget1)butto_2=ttk.Button(pw1,text="打开...",command=iget2)label2=ttk.Label(pw1,text="数据二路径:(在模式1和3中必选,模式2中不可选。模式3应当输入而非选择文件。)") value1=tk.StringVar()value2=tk.StringVar() entry2=ttk.Entry(pw1)label3=ttk.Label(pw1,text="数据分析复杂度:默认为0(最高),范围0-10(10最低)")scale1=tk.Scale(pw1,from_=0,to=10,orient="horizontal")scale1.config(length=200)butto1=ttk.Button(pw1,text="确定",command=make) butto2=ttk.Button(pw1,text="退出",command=sys.exit) label1.place(x=80,y=20)butto_1.place(x=350,y=20)label2.place(x=80,y=50)entry2.place(x=550,y=50)butto_2.place(x=700,y=50)label3.place(x=250,y=80)scale1.place(x=300,y=110)butto1.place(x=300,y=160)butto2.place(x=300,y=190) root.mainloop()else:sys.exit() except NameError:sys.exit()

2.stats.py

import statsmodels.api as smimport pandas as pdimport numpy as npdef st(path,x:float,mode=0):la=pd.read_csv(path,usecols=['特征组'] )lb=pd.read_csv(path,usecols=["目标组"]) la1=list(la["特征组"])lb1=list(lb["目标组"])X=la1Y=lb1if mode==0:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.sin(X),np.tan(X),np.cos(X) ))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.sin(x),np.tan(x),np.cos(x)])elif mode==1:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.sin(X)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.sin(x) ])elif mode==2:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4)]) elif mode==3:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,5)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,5)]) elif mode==4:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,5),np.power(X,6)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,5),np.power(X,6)]) elif mode==5:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,5),np.power(X,6),np.power(X,7)]) elif mode==6:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8)]) elif mode==7:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9)]) elif mode==8:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9),np.power(X,10)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9),np.power(X,10)]) elif mode==9:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9),np.power(X,10),np.power(X,11)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9),np.power(X,10),np.power(X,11)]) elif mode==10:dX=np.column_stack((X,np.power(X,2),np.power(X,3),np.power(X,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9),np.power(X,10),np.power(X,11),np.power(X,12)))X_added=sm.add_constant(dX)model=sm.OLS(Y,X_added)results=model.fit() p1="本次精度为"+str(results.rsquared*100)+"%" p2=results.predict([1,x,np.power(x,2),np.power(x,3),np.power(x,4),np.power(X,4),np.power(X,5),np.power(X,6),np.power(X,7),np.power(X,8),np.power(X,9),np.power(X,10),np.power(X,11),np.power(X,12)]) a1=p1;a2=p2try:p=p2[0]p=list(p)p0=p[0]sum0=0for i in p0:sum0=sum0+ip2=sum0/len(p0)except:p1=a1p2=a2return p1,p2

3.search.py

import requests import osimport jieba def search(name:str)->str :nali=jieba.cut(name)result=[]for i in nali:url = "/item/"+i r = requests.get(url) html_code = r.content.decode(r.encoding) hc=html_codewith open("new.txt","w",encoding="utf-8") as h:h.write(str(hc))with open("new.txt","r",encoding="utf-8") as n:real=n.readlines()get=real[10] text=get[34:-3]result.append(text)os.remove("new.txt")return result

4.image.py

import requestsimport base64 def get(path:str):request_url = "/rest/2.0/image-classify/v2/advanced_general" f = open(path, 'rb')img = base64.b64encode(f.read()) params = {"image":img}access_token = your_access_tokenrequest_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/x-www-form-urlencoded'}response = requests.post(request_url, data=params, headers=headers)if response:lre=response.json()res=dict(lre)reu=res["result"]kes=[]scs=[]for i in reu:kes.append(i["keyword"])scs.append(i["score"])return kes,scs

注意,文中的your_access_token需要替换成你自己的token!

文章总结

本文讲了简单tkinter/statsmodels的应用.多多关注和评论.

评论1:下期讲matplotlib数据可视化

评论2:下期讲tk进阶

评论3:下期讲图片爬虫

评论4:下期讲sklearn机器学习

评论5:下期讲Crypt数据加解密

评论6:下期讲图像识别

评论7:下期讲傅里叶变换

感谢阅读!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。