Python技能树共建之python|Python技能树共建之python urllib 模块
目录
- 一、Python urllib 模块是什么
- 二、使用方法
- 上手案例
- urlopen() 返回对象的更多方法
- urllib.Request() 类
- urllib.parse
- 三、提高场景
- error 模块
一、Python urllib 模块是什么
urllib
模块是 Python 标准库,其价值在于抓取网络上的 URL 资源,入门爬虫时必学的一个模块。不过更多的爬虫工程师上手学习的模块已经更换为 requests 了。在 Python3 中 urllib 模块包括如下内容。
urllib.request
:请求模块,用于打开和读取 URL;urllib.error
:异常处理模块,捕获urllib.error
抛出异常;urllib.parse
:URL 解析,爬虫程序中用于处理 URL 地址;urllib.robotparser
:解析 robots.txt 文件,判断目标站点哪些内容可爬,哪些不可以爬,但是用的很少。
二、使用方法
上手案例
打开一个测试站点,然后返回服务器响应内容。
from urllib.request import urlopenwith urlopen('https://www.example.net') as html:page = html.read()print(page)
上述代码用到了
urllib.requests
模块,其内部定义了打开 URL 的函数,授权验证的方法,重定向,cookie 操作等方法。代码中用到的
urlopen()
函数,就是打开一个 URL,该函数的语法格式如下所示:urllib.request.urlopen(url, data=https://www.it610.com/article/None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,*, cafile=None, capath=None, cadefault=False, context=None)
【Python技能树共建之python|Python技能树共建之python urllib 模块】参数描述如下所示:
url
:请求地址;data
:发送到服务器的其他数据对象,默认为 None;timeout
:超时时间;cafile
和capath
:cafile 为 CA 证书, capath 为 CA 证书的路径,使用 HTTPS 需要用到;context
:ssl.SSLContext 类型,用来指定 SSL 设置。
read()
方法,可以读取到整个网页数据。其余的函数与文件读取类似,分别是
readline()
,readlines()
。还可以调用对象的
getcode()
方法,获取网页状态码。print(html.getcode()) # 返回 200
urlopen() 返回对象的更多方法
使用
urlopen()
可以得到一个 HTTPResposne
类型的对象,它包括上文提及的 read()
方法,getcode()
方法,除此之外,还有如下内容可以使用。getheaders()
:获取请求头内容;getheader(name)
:获取指定请求头;msg
:信息属性;version
:版本属性;status
:状态属性。
urllib.Request() 类
URL 请求抽象类,使用它可以扩展更多的请求配置,其构造方法如下所示:
def __init__(self, url, data=https://www.it610.com/article/None, headers={},origin_req_host=None, unverifiable=False,method=None)
其参数说明如下所示:
url
:请求地址,必选参数;data
:请求参数,必须为bytes
类型数据,可以使用urlencode()
进行编码;headers
:字典类型,请求头设置;origin_req_host
:请求的主机地址,IP 或域名;method
:请求方法。
from urllib import request, parseurl = 'http://httpbin.org/post'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 你的UA'}dict = {'name': 'xiangpica'}# 转换数据类型data = https://www.it610.com/article/bytes(parse.urlencode(dict), encoding='utf8')# 实例化对象req = request.Request(url=url, data=https://www.it610.com/article/data, headers=headers, method='POST')# 添加请求头req.add_header('HOST', 'httpbin.org')# 发送数据response = request.urlopen(req)print(response.read().decode('utf-8'))
urllib.parse
该模块主要用于解析 URL,函数原型如下所示:
urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)
参数说明如下:
urlstring
:URL 地址;scheme
:协议类型,可用的包括 file、ftp、gopher、hdl、http、https、imap、mailto、 mms、news、nntp、prospero、rsync、rtsp、rtspu、sftp、 sip、sips、snews、svn、svn+ssh、telnet……;allow_fragments
:是否忽略 URL 中的fragment
部分。
scheme://netloc/path; params?query#fragment
说明如下所示:
scheme
:URL 协议;netloc
:域名和端口;path
:路径;params
:最后一个路径元素参数,不常用;query
:查询字符串;fragment
:片段标志。
from urllib.parse import urlparseresult = urlparse('http://www.example.com/index.html; info?id=10086#comment')print(type(result), result)print(result.scheme, result[0])print(result.netloc, result[1])print(result.path, result[2])print(result.params, result[3])print(result.query, result[4])print(result.fragment, result[5])
运行结果如下所示:
ParseResult(scheme='http', netloc='www.example.com', path='/index.html', params='info', query='id=10086', fragment='comment')
http http
www.example.com www.example.com
/index.html /index.html
info info
id=10086 id=10086
comment comment
urlparse() 返回结果是一个其余内容ParseResult
类型的对象。
urlunparse()
方法与上述方法逻辑相反;urljoin()
方法用于拼接链接;urlencode()
:格式化请求参数;quote()
:将内容转换为 URL 编码格式,尤其是转换中文字符;unquote()
:对 URL 进行解码。
三、提高场景
error 模块
在
urllib
中,error
模块定义异常,其包含如下类:URLError
:OSError 的一个子类,用于处理程序在遇到问题时会引发此异常;HTTPError
:URLError 的一个子类,用于处理特殊 HTTP 错误例如作为认证请求的时候
推荐阅读
- 基于python的口罩识别
- AR Apps开发人员的7个基本技能
- 编程(这是未来最重要的技能吗())
- 算法|【玩转数据结构 从入门到进阶12学习笔记】红黑树
- 二叉树的建立和遍历C&python实现
- 暑期实训|1.4.C语言基础进阶——红黑树
- 如何磨练/提高你的编码技能()
- 算法刷题打卡|算法学习 第三十天 有序数组构造二叉搜索树
- python-海洋数据处理|python 将垂直速度从压力坐标系转为高度坐标系(pa/s转为m/s)
- python-海洋数据处理|python 基于metpy计算位涡平流项(水平)