Python技能树共建之python urllib 模块

 更新时间:2022年05月22日 16:07:05   作者:梦想橡皮擦  
这篇文章介绍了Python技能树共建之python urllib 模块,urllib模块是 Python 标准库,更多相关介绍需要的小伙伴可以参考下面文章的详细内容

一、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('https://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()) # 返回 200

urlopen() 返回对象的更多方法

使用 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 = 'http://httpbin.org/post'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 你的UA'
}
dict = {
    'name': 'xiangpica'
}
# 转换数据类型
data = bytes(parse.urlencode(dict), encoding='utf8')
# 实例化对象
req = request.Request(url=url, data=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 部分。

标准的 URL 格式如下:

scheme://netloc/path;params?query#fragment

说明如下所示:

  • scheme:URL 协议;
  • netloc:域名和端口;
  • path:路径;
  • params:最后一个路径元素参数,不常用;
  • query:查询字符串;
  • fragment:片段标志。
from urllib.parse import urlparse
result = 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])

运行结果如下所示:

<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 comment

urlparse() 返回结果是一个 ParseResult 类型的对象。

其余内容

  • urlunparse() 方法与上述方法逻辑相反;
  • urljoin() 方法用于拼接链接;
  • urlencode():格式化请求参数;
  • quote():将内容转换为 URL 编码格式,尤其是转换中文字符
  • unquote():对 URL 进行解码。

三、提高场景

error 模块

在 urllib 中,error 模块定义异常,其包含如下类:

  • URLError:OSError 的一个子类,用于处理程序在遇到问题时会引发此异常;
  • HTTPError:URLError 的一个子类,用于处理特殊 HTTP 错误例如作为认证请求的时候

到此这篇关于Python技能树共建之python urllib 模块的文章就介绍到这了,更多相关 python urllib 模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pandas温差查询案例的实现

    pandas温差查询案例的实现

    本文主要介绍了pandas温差查询案例的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • python os.rename实例用法详解

    python os.rename实例用法详解

    在本篇文章里小编给大家整理的是一篇关于python os.rename实例用法详解内容,有需要的朋友们可以学习下。
    2020-12-12
  • Python实现京东抢秒杀功能

    Python实现京东抢秒杀功能

    这篇文章主要介绍了Python实现京东抢秒杀功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Python super()方法原理详解

    Python super()方法原理详解

    这篇文章主要介绍了Python super()方法原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Python如何运用pyaudio库去做一个固定采样率音频录制器

    Python如何运用pyaudio库去做一个固定采样率音频录制器

    这篇文章主要介绍了Python如何运用pyaudio库去做一个固定采样率音频录制器问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Flask中基于Token的身份认证的实现

    Flask中基于Token的身份认证的实现

    本文主要介绍了Flask中基于Token的身份认证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python if 判断语句详解

    Python if 判断语句详解

    这篇文章主要介绍了Python if 判断语句,包括流程控制,顺序结构和分支结构,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • python multiprocessing模块用法及原理介绍

    python multiprocessing模块用法及原理介绍

    这篇文章主要介绍了python multiprocessing模块用法及原理介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python组合无重复三位数的实例

    python组合无重复三位数的实例

    今天小编就为大家分享一篇python组合无重复三位数的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python中property属性的用处详解

    Python中property属性的用处详解

    这篇文章主要给大家介绍了关于Python中property属性的相关资料,需简单地说就是一个类里面的方法一旦被@property装饰,就可以像调用属性一样地去调用这个方法,它能够简化调用者获取数据的流程,而且不用担心将属性暴露出来,有人对其进行赋值操作,下面要的朋友可以参考下
    2022-04-04

最新评论