Python Urllib模块 三十行代码编写自己的英语翻译器,随用随翻

今天运用的是Urllib模块

  • urllib是基于http的高层库,它有以下三个主要功能:

  1. request处理客户端的请求

  2. response处理服务端的响应

  3. parse会解析url

Python Urllib模块 三十行代码编写自己的英语翻译器,随用随翻

下面我们来说的是request函数

urllib.request模块定义了一些打开URLs(一般是HTTP协议)复杂操作像是basic和摘要模式认证,重定向,cookies等的方法和类。这个模块式模拟文件模块实现的,将本地的文件路径改为远程的url。因此函数返回的是类文件对象(file-like object)

  • 运用方法

urllib.request.urlopen(url, data=None, [timeout ]*, cafile=None, capath=None, cadefault=False, context=None)

url可以是一个字符串形式或者Request 对象

如果data参数有值就是用post方式响应否则默认为GET 方式

urllib.request 模块使用HTTP/1.1 的无连接的状态协议

urlopen()函数返回类文件对象,提供以下内建方法:

read() , readline() ,readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样

info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息

getcode():返回Http状态码。

如果是http请求:

  1. (informational):请求已经收到,正在进行中

  2. (successful):请求成功接收,解析,完成

  3. (Redirection):需要重定向

  4. (Client Error):客户端问题,请求存在语法错误,网址未找到

  5. (Server Error):服务器问题

geturl():返回请求的url

接下来说的是urlencode函数

urllib库里面有个urlencode函数,可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串,比如:

Python Urllib模块 三十行代码编写自己的英语翻译器,随用随翻

当urlencode之后的字符串传递过来之后,接受完毕就要解码了——urldecode。urllib提供了unquote()这个函数,可没有urldecode()!

Python Urllib模块 三十行代码编写自己的英语翻译器,随用随翻

好,话不多说,上源码,这个就是短短的不到三十行代码的翻译器。

源码

Python Urllib模块 三十行代码编写自己的英语翻译器,随用随翻

程序执行情况:

Python Urllib模块 三十行代码编写自己的英语翻译器,随用随翻

这里要注意的是两个函数

  1. urllib.request.urlopen()

  2. urllib.parse.urlencode()

urllib.request.urlopen()函数其实不止一个参数,有好几个哦,其中第二个是data,data应该是一个buffer的标准应用程序/ x-www-form-urlencoded格式。

urllib.parse.urlencode()函数接受一个映射或序列集合,并返回一个字符串的格式。我们可以看看urllib.parse.urlencode()的结果是什么样的:

Python Urllib模块 三十行代码编写自己的英语翻译器,随用随翻

上图的结果刚好与urllib.request.urlopen()的data参数的数据类型要求一致了。

注意,上面urlopen当中的url,这个是分析有道翻译页面的真实的Request URL:

Python Urllib模块 三十行代码编写自己的英语翻译器,随用随翻

Python Urllib模块 三十行代码编写自己的英语翻译器,随用随翻

相关推荐