Python技能树共建之python urllib 模块
作者:梦想橡皮擦 发布时间:2023-02-07 04:02:40
一、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 错误例如作为认证请求的时候
来源:https://blog.51cto.com/cnca/5317932


猜你喜欢
- 下面是实现代码# coding:utf-8import time, serialfrom struct import *import bin
- Flask 是一个 Python 实现的 Web 开发微框架。这篇文章是一个讲述如何用它实现传送视频数据流的详细教程。我敢肯定,现在你已经知
- 本文实例为大家分享了vue简单的图书管理具体代码,供大家参考,具体内容如下<table class="table table
- 1. 前缀索引与全部索引概念怎么给字符串字段加索引?现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨
- 插入mysql时,如果内容中有引号等特殊符号,会报错,解决方法可以用反斜杠转义,还可以用pymysql的一个方法自动转义:c = '
- 简介mysql的innodb引擎查询记录时在无法使用索引覆盖的场景下,需要做回表操作获取记录的所需字段。mysql执行sql前会执行sql优
- 在编程时你一定碰到过时间触发的事件,在VB中有timer控件,而asp中没有, 假如你要不停地查询数据库来等待一个返回结果的话,我想你一定知
- MySQL 群集是一种技术,该技术允许在无共享的系统中部署“内存中”和“磁盘中”数据库的 Cluster 。通过无共享体系结构,系统能够使用
- 问题描述初步使用PyTorch进行平方根计算,通过range()创建一个张量,然后对其求平方根。a = torch.tensor(list(
- 目录range函数的使用第一种创建方式第二种创建方式第三种创建方式判断指定的数有没有在当前序列中循环结构总结range函数的使用作为循环遍历
- scratch-blocks是scratch-gui依赖的一个基本模块。它的作用是生成gui界面上的blocks。(有关scratch-bl
- location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.hre
- 本文实例总结了PHP中非常有用却鲜有人知的函数。分享给大家供大家参考,具体如下:PHP里有非常丰富的内置函数,很多我们都用过,但仍有很多的函
- 前言PyCharm是一种Python 的IDE工具(集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,内部
- 在分析sIFR之前,先来快速的了解一下sIFR是什么,以及它是如何工作的。sIFR表示scalable Inman Flash Replac
- 最小编辑距离或莱文斯坦距离(Levenshtein),指由字符串A转化为字符串B的最小编辑次数。允许的编辑操作有:删除,插入,替换。具体内容
- 1 :普通SQL语句可以用exec执行Select * from tableName exec('select * from tab
- 在自动化测试过程中,有时后会遇到元素定位方式没有问题,但是依旧抛出无法找到元素的异常的问题,通常情况下,如果元素定位没有问题,但还是无法找到
- 事先在网上搜索了一大圈,头都大了,看到那么多文章写道在python里安装psycopg2的各种坑和各种麻烦,各种不成功。搜索了一下午,索性外
- 背景说明服务部署在阿里云的K8s上,配置了基于Prometheus的Grafana监控。原本用的是自定义的Metrics接口统计,上报一些字