urllib常用小记
- 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.URLError
和urllib.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常用小记相关推荐
- python3urllib常见使用_Python3 urllib常用操作
urllib库python内置的HTTP请求库 四个模块:request,parse,error,rebotparser 一.request模块 请求对象组成:url,参数,请求头,请求体四部分.re ...
- Oracle常用小记
1. 控制台下启动Oracle的监听服务命令: lsnrctl start 启动数据库实例: oradim -startup -sid 数据库实例名(如:orcyn). 2. Oracle用 ...
- Python urllib和urllib2模块学习(一)
(参考资料:现代魔法学院 http://www.nowamagic.net/academy/detail/1302803) Python标准库中有许多实用的工具类,但是在具体使用时,标准库文档上对使用 ...
- 廖的python教程_廖雪峰的Python3.x教程.pdf
目录 Python教程 Python简介 安装Python Python解释器 第一个Python程序 使用文本编辑器 Python代码运行助手 输入和输出 源码 learning.py Python ...
- Python学习笔记:常用内建模块6 (urllib)
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- python parse函数_Python3的urllib.parse常用函数小结
本文实例讲述了Python3的urllib.parse常用函数.分享给大家供大家参考,具体如下: 1.获取url参数 >>> from urllib import parse > ...
- 小记,springboot项目中自己常用的logback配置文件
把配置文件放到resources这个classpath目录即可生效,日志输入样式是从springboot中日志配置中copy过来的, 其他常用配置不做过多注释了. logback-spring.xml ...
- Python3的urllib.parse常用函数小结
2019独角兽企业重金招聘Python工程师标准>>> 1.获取url参数 from urllib import parseurl = 'https://docs.python.or ...
- 【日常小记】linux中强大且常用命令:find、grep
在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 ...
最新文章
- Servlet学习DAY_02:重定向/ 文件上传/ Cookie和Session/ 导入一个工程 / 配置欢迎页面 / 同步请求和异步请求/JSON和AJax介绍 /过滤器
- python3.8.5怎么用-Python 3.8.5 正式发布
- 如何使用Elasticsearch groovy script脚本更新数据
- 一篇文章了解蛋白质组学研究
- px4原生源码学习一
- 内网穿透工具ngrok的使用
- python基本运算
- GBK、GB2312、GB18030
- 计算机学校教学大纲,中等职业学校计算机应用基础教学大纲
- Linux环境安装并配置Maven
- python 列表推导
- JsonHelper Json转xml,Json转DataSet,DataSet转Json
- 学习银行转账系统-代码摘取csdn
- 怎样高效利用PPT模板网站找到适合自己的PPT模板
- 010项目沟通管理和干系人管理
- 马化腾绝地逢生:山重水复疑无路,柳暗花明又一村
- 支持向量机_4:Outliers
- 源码剖析Redis中如何使用跳表的
- 足下校园C语言评估系统答案,江苏省江阴市南闸实验学校2020-2021学年八年级下学期第4周周练语文卷(word含答案))...
- css3价格斜切_css3 斜切角/斜边的实现方式