IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python学习笔记】简单调用百度API应用 -> 正文阅读

[Python知识库]【Python学习笔记】简单调用百度API应用

#本文一切代码及理论均来自于郑秋生、夏敏捷二位老师主编《Python项目案例发 从入门到实践》一书,本人仅做微改。创作本文的目的仅为总结本人的学习过程和成果,借此巩固。可能存在许多疏漏之处,还请各位同道多多批评指正。

????????今天学的是调用百度API一个章节,百度大家都熟悉,现如今中国最大的互联网企业之一,坐拥大量曾经的“爆款”,甚至拥有堪称第一代中国现象级软件的“百度贴吧”,创造了无数出圈梗,几乎是一代人的网络记忆。

????????当然了,由于各种原因,百度现在的影响力大不如前,曾经的如日中天沦落到如今只剩一句“What's your problem”为人所知。

? ? ? ? 那么,在这样的背景下,百度该如何回到曾经的辉煌呢
? ? ? ??

????????跟我没啥关系TnT,赚了钱又不给我分红

但是作为一名刚踏入互联网圈的小白,对百度还是挺喜欢的———毕竟百度提供了那么多好用的API~

????????今天我们需要借用的就是百度的翻译API来了解Python的一个新库:urllib!

????????urllib库是Python最常用的,访问网页用的库,通过这个简约的库,便可以像访问本地文件一般,去访问网页,并抓取、读取和保存网页。怎么个意思呢,就是网页里头的东西,你不用打开网页,费个三五秒简单地敲打几下鼠标,只需要耗费半个多小时敲个几十行代码,测试个几分钟,不到一小时就完事了,是不是特别简便啊!(bushi)

? ? ? ? urllib库和其他的Python库一样,延续了简单易懂的特点,主要的模块和函数都好用好记,主要用于操作URL的模块有以下几款:

urllib.request
#打开和读取URL

urllib.error
#包含urllib.request中包含的错误

urllib.parse
#包含解析URL的诸多方法

urllib.robotparser
#书中原话:用来解析robots.txt文本文件。它提供一个单独的robotfileparser类。通过该类的can—fetch()方法测试爬虫是否可以下载一个页面

? ? ? ? 先说? urllib.request? 和??urllib.parse? 两个大概是常用的模块着手,来对urllib库有一个整体的认识吧!

? ? ? ? 想要和一位姑娘搞对象,就要先走近她的灵魂;想要读取一个网站,就要先打开它的大门。那么Python是怎么“接近”一位姑娘的“灵魂”的呢?

? ? ? ? urllib的第一个方法,便是urllib.requset.urlopen(不是openurl啊!!)

????????urlopen会返回response对象,response对象的操作拥有多种方法:

read()  close()  readline()
#与文件操作相同

info()
#能够返回远程服务器的头信息

getcode()
#能够返回远程服务器的状态码,就是各位熟知的什么 401 404 等

geturl()
#能够返回网页的url

? ? ? ? 具体使用如下:

from urllib import request

if __name__=="__main__":
    response = request.urlopen("http://fanyi.baidu.com")
    html = response.read()
    html = html.decode("uft-8")
    print(read)

? ? ? ? 若如此做,我们便可以得到服务器接收到的信息——不是大家看到的解析页面,而是解析前的界面信息,由于内容量过大,大家可以自行试一试,会得到一串长长的Html语句。(就是如<html></html>这种一对一对的语句)

? ? ? ? 如果需要下载,可以使用urltrieve()函数

from urllib import request
request.urltrieve(fileurl,filename)

? ? ? ? 光走近姑娘的灵魂没有用啊,老话讲叫“潘驴邓小闲”?,现在讲叫“渣男加暖男”,你得慢慢地贴近她,呵护她,靠近她,分享快乐,分担痛苦,你们才能走到一起。

? ? ? ? urllib也是,光打开网站只能是作为学习html的一个辅助,只有进一步操作,才能得到想要的结果。

? ? ? ? 网站最重要的,便是HTTP的头信息。HTTP是WEB开发的核心,头信息又是HTTP的核心信息,就仿佛喜欢一位姑娘,你肯定是喜欢她的性格、身材、颜值、才华等,很少有人因为姑娘的脚指甲、膝盖、肘关节或后背而喜欢一位姑娘吧,头信息就是包含了HTTP的颜值、身材、性格、才华的一份“履历说明”,getheader()方法便能够帮助我们获得姑娘的“履历说明”

? ? ? ? 在获得头信息以前,应当先获得status和reason两项信息。

? ? ? ? 一位姑娘,不是你表白她就会接受你;一个网站,不是你访问他就会允许你。status就是姑娘有没有接受你,reason就是姑娘拒绝你的原因。那么如果被拒绝了呢?那“履历说明”自然就和你无关了~

? ? ? ? 具体操作如下:

from urllib import request

r = request.urlopen("http://fanyi.baidu.com")

data = r.reaf()

read = read.decode("utf-8")

print("status:"+r.status+"reason:"+r.reason)

for s, t in r.getheader():
    print("%s:%s"%(s,t)

? ? ? ? 这样得到姑娘的“履历说明”后,我们便能够根据自己的目标,去找到姑娘相应的指标。那么,我们怎么从中抽取出某一项指标呢

? ? ? ? 还记得上面说的多种方法么,这时候便派上了用途。

#接续上一段代码段
print('geturl反馈信息:',r.geturl())
print('info反馈信息:',r.info())
print('geturl反馈信息:',r.getcode())

? ? ? ? ?当然了,你不但要看人家姑娘的履历说明,人家姑娘也得看你啊,看你的性格、收入、颜值和工作等信息。这个时候就需要你给人家姑娘发信息。

? ? ? ? 根据HTTP标准,get用于信息获取——就是上面我们做的所有事情,就是由姑娘(服务器)到你(客户端);另一个就是post,就是我们提到的给姑娘发信息。就是由你(客户端)到姑娘(服务器);

? ? ? ? 当然了,get也可以给姑娘递履历信息,但是有几点不同于post的:

? ? ? ? 1.? get就是把自己想说的话信息写在HTTP信息里,post就是把个人信息也写在履历信息里,区别在哪儿呢?这儿埋个小问题,大家很容易可以在网上查到,会比我这里逼逼叨叨大家记得清楚。

? ? ? ? 2.? get要求你不能写超过1024个字节;post却无长度上的限制。

? ? ? ? 如果希望使用post方法,只需要使用在方法中加入data参数。

 response = request.urlopen(URL,data)

? ? ? ? 现在有的女生,被一些网络小说或者网剧教坏了,老想找什么“高富帅”或“霸道总裁”,一般男生不管多优秀,她们都不屑一顾。

? ? ? ? 对于这种女生,如果我们要接近,就一定要先给自己坳一个“高富帅”的人设。(当然了,这种女生只是极少数,但是如果真的遇到,我还是推荐各位男同胞一定不能过于沉沦。你是很棒的,你值得更好的!)

? ? ? ? 同样的,有的网站也只允许人访问——目的主要是为了防止爬虫(当然了,不止这一个方法防止爬虫,这只是一个底线方法)。那么,Python为了防止网站觉得他不是Python而是人类呢?这时候我们就需要代理来隐藏身份了。

? ? ? ? 用户代理一般放在“个人履历”(head)信息中。网站一检查:“你有。行,过去吧”“你没有。你是Python脚本,你不准进!”

? ? ? ? 具体的代理,根据版本不同、设备不同和端口不同各有不同,具体使用时还需要各位在网上自行搜索使用,在此不可尽举,也就不便赘述,只挑选其一为列位举个栗子

User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0
#Firefox的代理,从中也可以看得出这款Firefox浏览器的具体信息

? ? ? ? ?至于设置方法,只需要在创建Request对象时,将参数传入header中

from urllib import request
if __name__ == "__main__":
    url = "https://www.csdn.net/"
    head = {}
    #写入信息
    head['User-Agent']='Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13'
    req = request.Request(url,headers=head)
    response = request.urlopen(req)
    html = response.read().decode("utf-8")
    print(html)

? ? ? ? 大抵如此。

? ? ? ? 这样,我们理论层面的知识就学完了。接下来就可以实践了。

? ? ? ? 制作一个小翻译软件,就首先要做一个页面,这里就需要用到tkinter(大家一定要熟悉一下这个图形库)

?????????

if __name__ == "__main__":
#绘图
    root = Tk()
    root.title("简单单词翻译")
    root['width']=250
    root['height']=130
    Label(root,text='输入要翻译的内容',width=15).place(x=1,y=1)
    Entry1 = Entry(root,width = 20)
    Entry1.place(x=110,y=1)
    Label(root,text='翻译的结果:',width=18).place(x=1,y=20)
    s=StringVar()
    s.set("hi~")
    Entry2 = Entry(root,width=20,textvariable=s)
    Entry2.place(x=110,y=20)
#两个事件按钮
    Button1=Button(root,text='翻译',width=8)
    Button1.place(x=40,y=80)
    Button2 = Button(root, text='清空', width=8)
    Button2.place(x=110, y=80)
    Button1.bind("<Button-1>",leftClick)
    Button2.bind("<Button-1>", leftClick2)
    root.mainloop()

????????之后就是对数据的传导(你-->python-->baidu api)

? ? ? ? 你-->python

#确认事件按钮
def leftClick(event):
    s.set("")
    Entry2.config(Entry2, text=s)
    print('hi')
    en_str = Entry1.get()
    print(en_str)
    vText = translate_word(en_str)
    Entry2.config(Entry2,text=vText)
    print("say yes")
    Entry2.delete(0, 'end')
    Entry2.insert(0,vText)

#清空事件按钮
def leftClick2(event):
    s.set("")
    Entry2.insert(0,"")
    s.set("")
    Entry2.config(Entry2,text=s)

Python-->Baidu api

def translate_word(en_str):
    URL='http://api.fanyi.baidu.com/api/trans/vip/translate'
    Form_Data={}
#头信息,整体格式为{"from":"en"(从XX语言),"to":"zh"(到XX语言),"trans_result":[{"src":"hello","dst":"\u4f60\u597d"}]}
    Form_Data['from']='en'
    Form_Data['to']='zh'
    Form_Data['q']=en_str
    Form_Data['appid']='自己申请的app id'
    Form_Data['salt']='随机数'
    key="自己申请的密钥"
#签名格式要求,之后用hashlib内置的md5函数计算MD5值
    m=Form_Data['appid']+en_str+Form_Data['salt']+key
    m_MD5=hashlib.md5(m.encode('utf8'))
    Form_Data['sign']=m_MD5.hexdigest()

    data = parse.urlencode(Form_Data).encode('utf-8')

    response = request.urlopen(URL,data)
    html=response.read().decode('utf-8')
    translate_results=json.loads(html)
    translate_results = translate_results['trans_result'][0]['dst']
    print("翻译的结果是:%s" % translate_results)
    return translate_results

? ? ? ? ?最后,展示一下需要引用的lib(其实我相信朋友已经能够从代码中看出个八九不离十了)

from tkinter import *
from urllib import request
from urllib import parse
import json
import hashlib

? ? ? ? ?好了,这一章节的学习就进入了尾声,接下来我可能会进入爬虫的学习,可能就需要一段时间才能够总结出学习笔记,那么大家,未来见!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 16:02:37  更:2022-01-03 16:04:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:12:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码