#以下介绍是基于Python3.4.3

一.  简介

    urllib.request.urlopen()函数用于实现对目标url的访问。

  函数原型如下:urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) 

  函数定义如下:

  1. def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
  2. *, cafile=None, capath=None, cadefault=False, context=None):
  3. global _opener
  4. if cafile or capath or cadefault:
  5. if context is not None:
  6. raise ValueError(
  7. "You can't pass both context and any of cafile, capath, and "
  8. "cadefault"
  9. )
  10. if not _have_ssl:
  11. raise ValueError('SSL support not available')
  12. context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH,
  13. cafile=cafile,
  14. capath=capath)
  15. https_handler = HTTPSHandler(context=context)
  16. opener = build_opener(https_handler)
  17. elif context:
  18. https_handler = HTTPSHandler(context=context)
  19. opener = build_opener(https_handler)
  20. elif _opener is None:
  21. _opener = opener = build_opener()
  22. else:
  23. opener = _opener
  24. return opener.open(url, data, timeout)

二.  函数参数介绍

  <1>url 参数:目标资源在网路中的位置。可以是一个表示URL的字符串(如:http://www.xxxx.com/);也可以是一个urllib.request对象,详细介绍请跳转

  <2>data参数:data用来指明发往服务器请求中的额外的信息(如:在线翻译,在线答题等提交的内容)。HTTP是python中实现的众多网络通信http、https、ftp等协议中,唯一一个             使用data 参数的,也就是说只有打开的是http网址的时候,自定义data参数才会有作用。另外,官方API手册介绍指出:

<2.1> data必须是一个字节数据对象(Python的bytes object)

     <2.2>data必须符合标准the standard application/x-www-form-urlencoded format,怎么得到这种标准结构的data呢?使用urllib.parse.urlencode()将自定义的data转换成

         标准格式,而这个函数所能接收的参数类型是pyhon中的mapping object(键/值对,如dict) or a sequence of two-element tuples(元素是tuple的列表)。

     <2.3>data也可以是一个可迭代的对象,这种情况下就需要配置response对象中的Conten-length,指明data的大小。

     <2.4>data默认是None,此时以GET方式发送请求;当用户给出data参数的时候,改为POST方式发送请求。

  <3>cafile、capath、cadefault 参数:用于实现可信任的CA证书的HTTP请求。(基本上很少用)

  <4>context参数:实现SSL加密传输。(基本上很少用)

三.  举个栗子

  下面这个程序,实现了urlopen()函数的大部分功能,特别是data参数。data自定义,data格式转换,数据的编码encode()和解码decode()。

  1. #coding=utf-8
  2. #Python3.4.3 OS:W7-32
  3. '''
  4. 利用有道翻译进行在线翻译
  5.  
  6. '''
  7. import urllib.request
  8. import urllib.parse
  9. import json
  10.  
  11. def traslate(words):
  12. #目标URL
  13. targetURL = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
  14.  
  15. #用户自定义表单,words表示的是用户要翻译的内容。这里使用的是dict类型,也可以使用元组列表(已经试过的)。
  16. data = {}
  17. data['type'] = 'AUTO'
  18. data['i'] = words
  19. data['doctype'] = 'json'
  20. data['xmlVersion'] = '1.8'
  21. data['keyfrom'] = 'fanyi.web'
  22. data['ue'] = 'UTF-8'
  23. data['action'] = 'FY_BY_CLICKBUTTON'
  24. data['typoResult'] = 'true'
  25.  
  26. #将自定义data转换成标准格式
  27. data = urllib.parse.urlencode(data).encode('utf-8')
  28.  
  29. #发送用户请求
  30. html = urllib.request.urlopen(targetURL, data)
  31.  
  32. #读取并解码内容
  33. rst = html.read().decode("utf-8")
  34. rst_dict = json.loads(rst)
  35.  
  36. return rst_dict['translateResult'][0][0]['tgt']
  37.  
  38. if __name__ == "__main__":
  39. print("输入字母q表示退出")
  40. while True:
  41. words = input("请输入要查询的单词或句子:\n")
  42. if words == 'q':
  43. break
  44. result = traslate(words)
  45. print("翻译结果是:%s"%result)

~~~~有待改进,希望大家提出宝贵意见,一同学习。

=======================================================================================================

参考来源:《小甲鱼零基础入门学Python》这个视频讲的超好,诙谐幽默,又详细。

     官方文档:https://docs.python.org/3/

Python中urlopen()介绍的更多相关文章

  1. python中namedtuple介绍

    namedtuple:namedtuple类位于collections模块,有了namedtuple后通过属性访问数据能够让我们的代码更加的直观更好维护.namedtuple能够用来创建类似于元祖的数 ...

  2. python中模块介绍

    一,模块概念 在计算机程序开发的过程当中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编码更加容易维护,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码 ...

  3. 如何解决python中urlopen超时问题

    看代码: 利用urlopen中的超时参数设立一个循环 while True: try: page = urllib.request.urlopen(url, timeout=3) break exce ...

  4. 三十八、python中反射介绍

    一.反射:根据字符串的形式去对象(某个模块)中去操作成员通过字符串的形式,导入模块通过字符串的形式,去模块中寻找指定的函数,并执行 1.__import__:用于字符串的形似执行导入模块 inp=in ...

  5. 三十六、python 中subprocess介绍

    import subprocess 1.执行系统命令subprocess.call('ipconfig') #shell=False时,拼接命令分开写,放在列表中,等于True时,可写一块,空格隔开例 ...

  6. 【转】Python中的赋值、浅拷贝、深拷贝介绍

    这篇文章主要介绍了Python中的赋值.浅拷贝.深拷贝介绍,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式,需要的朋友可以参考下   和很多语言一样,Python中 ...

  7. Python中的__init__和__new__介绍

    介绍 首先我们要知道在面向对象编程中,实例化基本遵循创建实例对象.初始化实例对象.最后返回实例对象这么一个过程. Python 中的 __new__ 方法负责创建一个实例对象,__init__ 方法负 ...

  8. [转载]python中multiprocessing.pool函数介绍

    原文地址:http://blog.sina.com.cn/s/blog_5fa432b40101kwpi.html 作者:龙峰 摘自:http://hi.baidu.com/xjtukanif/blo ...

  9. python中multiprocessing.pool函数介绍_正在拉磨_新浪博客

    python中multiprocessing.pool函数介绍_正在拉磨_新浪博客     python中multiprocessing.pool函数介绍    (2010-06-10 03:46:5 ...

随机推荐

  1. 监视系统3389的VBS脚本

    Title: 监视系统3389的VBS脚本 --2010-10-27 19:56 从网上找的,不知道是不是NP写的那个 ---------------------------------------- ...

  2. Retina 显示屏

    Retina 直接翻译是视网膜的意思.在IT上,是Apple 公司提出的.意思是指一个显示屏的颗粒度 px 密度高到人类无法看见.要了解细节必须先了解基础知识inch 英寸 1 inch = 2.52 ...

  3. altium designer不经过原理图直接在空白pcb上加封装然后画线

    如果是复杂点的PCB,建议还是画下SCH,如果PCB只有几个元件,那么可以用这种方法,想不画原理图,直接进行布线,往往是很多初学者最想知道的,但是这也一定不是初学者能学到的.因为你买的书,都是按画PC ...

  4. C51程序优化

    1.指针: 对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高.但是在Keil中则相反,使用数组比使用的指针生成的代码更短.通常使用自加.自减指令和复合赋值表达式(如a-=1及a+=1 ...

  5. 得到RTP包中的timestamp

    NTP------网络时间协议 PTP------精确时间协议 PTS,DTS的关系: http://www.cnblogs.com/qingquan/archive/2011/07/27/21189 ...

  6. 使用ant自动编译安卓项目并签名

     准备阶段: 1.下载ant,jdk,android sdk        ant下载地址:ant.apache.org/bindownload.cgi 2. 设置环境变量      ANT_HO ...

  7. GF(2^8)乘法优化

    利用指数表和对数表,实现GF(2^8)的乘法优化. 首先利用简单的基础的GF(2^8)乘法,构造指数表和对数表.在这里选取生成元3. 指数表exp[i] = 3^i,对数表log[i] = log3( ...

  8. 项目开发中封装一个BarButtonItem类别-很实用

    Encapsulates a TabBarItem--封装一个BarButtonItem类 在我们程序的导航栏的左边或右边一般都会有这样的BarButtonItem,用来界面之间的跳转 如果我们有很多 ...

  9. (转)苹果推送通知服务教程 Apple Push Notification Services Tutorial

    本文译自http://www.raywenderlich.com/.原文由iOS教程团队 Matthijs Hollemans 撰写,经原网站管理员授权本博翻译. 在iOS系统,考虑到手机电池电量,应 ...

  10. ionic框架前端生产环境的简单部署

    1. 效果对比 1.1 开发环境 css+js+lib文件大小为好多M :) 1.2 部署环境(生产环境) css+js+lib文件大小约为800K 文件大小:好多M–>800K(多少自己试下) ...