如何构建Python技能树中的urllib模块应用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1213个文字,预计阅读时间需要5分钟。
Python的urllib模块是什么?
urllib模块是Python标准库的一部分,用于抓取网络上的URL资源。它是学习爬虫时必备的一个模块。随着requests模块的流行,urllib模块的使用逐渐减少。
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 urlopen with urlopen('www.example.net') as html: page = html.read() print(page)上述代码用到了 urllib.requests 模块,其内部定义了打开 URL 的函数,授权验证的方法,重定向,cookie 操作等方法。
代码中用到的 urlopen() 函数,就是打开一个 URL,该函数的语法格式如下所示:
urllib.request.urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *, cafile=None, capath=None, cadefault=False, context=None)参数描述如下所示:
- url:请求地址;
- data:发送到服务器的其他数据对象,默认为 None;
- timeout:超时时间;
- cafile 和 capath:cafile 为 CA 证书, capath 为 CA 证书的路径,使用 HTTPS 需要用到;
- context:ssl.SSLContext 类型,用来指定 SSL 设置。
调用该对象的 read() 方法,可以读取到整个网页数据。
其余的函数与文件读取类似,分别是 readline(),readlines()。
还可以调用对象的 getcode() 方法,获取网页状态码。
print(html.getcode()) # 返回 200urlopen() 返回对象的更多方法
使用 urlopen() 可以得到一个 HTTPResposne 类型的对象,它包括上文提及的 read() 方法,getcode() 方法,除此之外,还有如下内容可以使用。
- getheaders():获取请求头内容;
- getheader(name):获取指定请求头;
- msg:信息属性;
- version:版本属性;
- status:状态属性。
urllib.Request() 类
URL 请求抽象类,使用它可以扩展更多的请求配置,其构造方法如下所示:
def __init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)其参数说明如下所示:
- url:请求地址,必选参数;
- data:请求参数,必须为 bytes 类型数据,可以使用 urlencode() 进行编码;
- headers:字典类型,请求头设置;
- origin_req_host:请求的主机地址,IP 或域名;
- method:请求方法。
测试代码如下所示:
from urllib import request, parse url = 'netloc/path;params?query#fragment说明如下所示
- scheme:URL 协议;
- netloc:域名和端口;
- path:路径;
- params:最后一个路径元素参数,不常用;
- query:查询字符串;
- fragment:片段标志。
运行结果如下所示:
<class 'urllib.parse.ParseResult'> 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 commenturlparse() 返回结果是一个 ParseResult 类型的对象。
其余内容
- urlunparse() 方法与上述方法逻辑相反;
- urljoin() 方法用于拼接链接;
- urlencode():格式化请求参数;
- quote():将内容转换为 URL 编码格式,尤其是转换中文字符;
- unquote():对 URL 进行解码。
提高场景
error 模块
在 urllib 中,error 模块定义异常,其包含如下类:
- URLError:OSError 的一个子类,用于处理程序在遇到问题时会引发此异常;
- HTTPError:URLError 的一个子类,用于处理特殊 HTTP 错误例如作为认证请求的时候
本文共计1213个文字,预计阅读时间需要5分钟。
Python的urllib模块是什么?
urllib模块是Python标准库的一部分,用于抓取网络上的URL资源。它是学习爬虫时必备的一个模块。随着requests模块的流行,urllib模块的使用逐渐减少。
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 urlopen with urlopen('www.example.net') as html: page = html.read() print(page)上述代码用到了 urllib.requests 模块,其内部定义了打开 URL 的函数,授权验证的方法,重定向,cookie 操作等方法。
代码中用到的 urlopen() 函数,就是打开一个 URL,该函数的语法格式如下所示:
urllib.request.urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *, cafile=None, capath=None, cadefault=False, context=None)参数描述如下所示:
- url:请求地址;
- data:发送到服务器的其他数据对象,默认为 None;
- timeout:超时时间;
- cafile 和 capath:cafile 为 CA 证书, capath 为 CA 证书的路径,使用 HTTPS 需要用到;
- context:ssl.SSLContext 类型,用来指定 SSL 设置。
调用该对象的 read() 方法,可以读取到整个网页数据。
其余的函数与文件读取类似,分别是 readline(),readlines()。
还可以调用对象的 getcode() 方法,获取网页状态码。
print(html.getcode()) # 返回 200urlopen() 返回对象的更多方法
使用 urlopen() 可以得到一个 HTTPResposne 类型的对象,它包括上文提及的 read() 方法,getcode() 方法,除此之外,还有如下内容可以使用。
- getheaders():获取请求头内容;
- getheader(name):获取指定请求头;
- msg:信息属性;
- version:版本属性;
- status:状态属性。
urllib.Request() 类
URL 请求抽象类,使用它可以扩展更多的请求配置,其构造方法如下所示:
def __init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)其参数说明如下所示:
- url:请求地址,必选参数;
- data:请求参数,必须为 bytes 类型数据,可以使用 urlencode() 进行编码;
- headers:字典类型,请求头设置;
- origin_req_host:请求的主机地址,IP 或域名;
- method:请求方法。
测试代码如下所示:
from urllib import request, parse url = 'netloc/path;params?query#fragment说明如下所示
- scheme:URL 协议;
- netloc:域名和端口;
- path:路径;
- params:最后一个路径元素参数,不常用;
- query:查询字符串;
- fragment:片段标志。
运行结果如下所示:
<class 'urllib.parse.ParseResult'> 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 commenturlparse() 返回结果是一个 ParseResult 类型的对象。
其余内容
- urlunparse() 方法与上述方法逻辑相反;
- urljoin() 方法用于拼接链接;
- urlencode():格式化请求参数;
- quote():将内容转换为 URL 编码格式,尤其是转换中文字符;
- unquote():对 URL 进行解码。
提高场景
error 模块
在 urllib 中,error 模块定义异常,其包含如下类:
- URLError:OSError 的一个子类,用于处理程序在遇到问题时会引发此异常;
- HTTPError:URLError 的一个子类,用于处理特殊 HTTP 错误例如作为认证请求的时候

