• urllib简介
  • urllib.request
    • 方法:urllib.request.urlopen
    • 类:urllib.request.Request
    • 代理
    • 方法:urllib.request.urlretrieve
  • urllib.parse
  • urllib.error
  • urllib.robotparser

urllib简介

python3内置库urllib,包含一系列处理URL的方法。urllib有四个子模块:

  • urllib.request
  • urllib.error
  • urllib.parse
  • urllib.robotparser

urllib.request

这个模块最重要内容是方法urllib.request.urlopen()与URL请求类urllib.request.Request()

方法:urllib.request.urlopen

方法定义为:

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

参数url是一个str对象或者Request对象。如果是字符串对象,其值是有效的URL;Request对象由一个抽象的请求类urllib.request.Request()实例化,如果我们要定制请求头或者发起POST请求,把Request对象作为参数更适合。

如果发起POST请求,我们就要传入data参数,该参数是一个bytes、file-like或iterables(可迭代对象)。它最常见的形式为将要查询的键值对通过urllib.parse.urlencode编码为application/x-www-form-urlencoded格式(注意这是一个str对象),然后编码为bytes对象,赋给data参数。

该方法返回值对象有三个通用方法:

  • geturl()
  • info()
  • getcode()

如果URL是HTTP或HTTPS协议,那么返回对象会继承http.client.HTTPResponse对象的方法和属性:

  • HTTPResponse.read([amt])
  • HTTPResponse.getheader(name, default=None)
  • HTTPResponse.msg
  • HTTPResponse.version
  • HTTPResponse.status
  • HTTPResponse.reason

它的返回值还有上下文管理器特性,这意味我们可以使用with ··· as语句

类:urllib.request.Request

类定义为:

urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

参数url是一个str对象,其值是有效的URL;参数method默认或者data=None时,值为GET,否则值为POST

urllib.request.urlopen()一样,data参数一般需要urllib.parse.urlencode编码,然后再编码为bytes对象。

headers是个字典对象,可以定制请求头。如果业务场景是爬虫,User-Agent默认值为Python-urllib/2.6,我们通常不使用这个默认的用户代理。

实例化对象的常用方法和属性如下:

  • Request.type
  • Request.origin_req_host
  • Request.selector
  • Request.data
  • Request.get_full_url()
  • Request.unverifiable
  • Request.method
  • Request.get_method()
  • Request.add_header(key, val)
  • Request.add_unredirected_header(key, header)
  • Request.has_header(header)
  • Request.remove_header(header)
  • Request.get_header(header_name, default=None)
  • Request.header_items()
  • Request.set_proxy(host, type)

代理

首先,通过urllib.request.ProxyHandler(proxies=None)实例化handlers对象,它包含了协议和代理服务器的IP及端口;然后使用urllib.request.build_opener([handler, ...])方法构建OpenerDirector对象,通过它,利用OpenerDirector.open()方法打开URL。

如果我们要使用全局代理,需要OpenerDirector对象传入urllib.request.install_opener(opener),此后urlopen()都通过OpenerDirector打开URL。

方法:urllib.request.urlretrieve

方法定义为:

urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)

该方法可以将URL表示的网络对象下载到本地文件,它还返回一个两元素元组(filename, headers)filename是本地文件名,headers是响应头。

当参数filename未指定,会自动创建临时文件。

reporthook是回调函数,该函数接受三个参数:目前已下载块的数量、每个块的大小(字节表示)、文件的总大小;当首次链接到URL时会触发一次回调函数,此后每读取一个块,触发一次回调函数。

当HTTP协议时,可以发起POST请求,同urllib.request.urlopen()一样,data参数一般需要urllib.parse.urlencode编码,然后再编码为bytes对象。

读取下载的文件时,如果出现unicode错误,可以尝试指定打开文件的编码为utf-8

urllib.parse

这个模块比较常用的方法是urllib.parse.urlencode,用于对查询键值对编码为application/x-www-form-urlencoded格式。

该方法定义为:

urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None, quote_via=quote_plus)

参数query是一个dict对象或含有两元素的元组的列表对象。

返回值是ascii编码的str对象。

代码示例如下:

  • GET请求
    python import urllib.request import urllib.parse params = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) url = "http://www.musi-cal.com/cgi-bin/query?%s" % params with urllib.request.urlopen(url) as f: print(f.read().decode('utf-8'))

  • POST请求
    python import urllib.request import urllib.parse data = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) data = data.encode('ascii') with urllib.request.urlopen("http://requestb.in/xrbl82xr", data) as f: print(f.read().decode('utf-8'))

urllib.error

这个模块定义了异常对象urllib.error.URLErrorurllib.error.HTTPError

这两个异常对象有不同的属性。

  • urllib.error.URLError

    • reason
  • urllib.error.HTTPError
    • reason
    • code
    • headers

urllib.robotparser

这个模块式用来解析robots.txt,通过urllib.robotparser.RobotFileParser对象操作robots.txt文件。

类定义如下:

urllib.robotparser.RobotFileParser(url='')

常用方法和属性如下:

  • set_url(url)
  • read()
  • can_fetch(useragent, url)
  • crawl_delay(useragent)
  • request_rate(useragent)

转载于:https://www.cnblogs.com/weixia-blog/p/9124111.html

urllib常用小记相关推荐

  1. python3urllib常见使用_Python3 urllib常用操作

    urllib库python内置的HTTP请求库 四个模块:request,parse,error,rebotparser 一.request模块 请求对象组成:url,参数,请求头,请求体四部分.re ...

  2. Oracle常用小记

    1. 控制台下启动Oracle的监听服务命令: lsnrctl start      启动数据库实例: oradim -startup -sid 数据库实例名(如:orcyn). 2. Oracle用 ...

  3. Python urllib和urllib2模块学习(一)

    (参考资料:现代魔法学院 http://www.nowamagic.net/academy/detail/1302803) Python标准库中有许多实用的工具类,但是在具体使用时,标准库文档上对使用 ...

  4. 廖的python教程_廖雪峰的Python3.x教程.pdf

    目录 Python教程 Python简介 安装Python Python解释器 第一个Python程序 使用文本编辑器 Python代码运行助手 输入和输出 源码 learning.py Python ...

  5. Python学习笔记:常用内建模块6 (urllib)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  6. python parse函数_Python3的urllib.parse常用函数小结

    本文实例讲述了Python3的urllib.parse常用函数.分享给大家供大家参考,具体如下: 1.获取url参数 >>> from urllib import parse > ...

  7. 小记,springboot项目中自己常用的logback配置文件

    把配置文件放到resources这个classpath目录即可生效,日志输入样式是从springboot中日志配置中copy过来的, 其他常用配置不做过多注释了. logback-spring.xml ...

  8. Python3的urllib.parse常用函数小结

    2019独角兽企业重金招聘Python工程师标准>>> 1.获取url参数 from urllib import parseurl = 'https://docs.python.or ...

  9. 【日常小记】linux中强大且常用命令:find、grep

    在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 ...

最新文章

  1. Servlet学习DAY_02:重定向/ 文件上传/ Cookie和Session/ 导入一个工程 / 配置欢迎页面 / 同步请求和异步请求/JSON和AJax介绍 /过滤器
  2. python3.8.5怎么用-Python 3.8.5 正式发布
  3. 如何使用Elasticsearch groovy script脚本更新数据
  4. 一篇文章了解蛋白质组学研究
  5. px4原生源码学习一
  6. 内网穿透工具ngrok的使用
  7. python基本运算
  8. GBK、GB2312、GB18030
  9. 计算机学校教学大纲,中等职业学校计算机应用基础教学大纲
  10. Linux环境安装并配置Maven
  11. python 列表推导
  12. JsonHelper Json转xml,Json转DataSet,DataSet转Json
  13. 学习银行转账系统-代码摘取csdn
  14. 怎样高效利用PPT模板网站找到适合自己的PPT模板
  15. 010项目沟通管理和干系人管理
  16. 马化腾绝地逢生:山重水复疑无路,柳暗花明又一村
  17. 支持向量机_4:Outliers
  18. 源码剖析Redis中如何使用跳表的
  19. 足下校园C语言评估系统答案,江苏省江阴市南闸实验学校2020-2021学年八年级下学期第4周周练语文卷(word含答案))...
  20. css3价格斜切_css3 斜切角/斜边的实现方式

热门文章

  1. Windows下安装MySQL
  2. 省选专练【POI2015】Podzial naszyjnika
  3. C#WinForm 窗体单例模式 反射单例
  4. nginx 在ubuntu 上的启动,停止,重启
  5. Java程序员,上班那点事儿
  6. PetShop 4.0 SQLHelper
  7. 拉格朗日乘数法_拉格朗日乘数法介绍(不含证明)
  8. ffmpeg 提高编解码效率_介绍几款强大常用的PS插件,让你的工作效率大大提高(含插件如何安装使用教程)...
  9. Metatdata分析
  10. (22)Verilog HDL结构:function语句