简介
在可供使用的网络库中,和可能是投入产出比最高的两个,是Python中操作url的官方标准库。它们让你能够通过网络访问文件,就像这些文件位于你的计算机中一样。只需一个简单的函数调用,就几乎可将统一资源定位符(URL)可指向的任何动作作为程序的输入。结合re模块使用将发挥强大威力!
一个简单的例子:
模块和的功能差不多,简单来说是的增强——更好一些,但是urllib中有urllib2中所没有的函数。对于简单的下载, 绰绰有余。 如果需要实现或亦或编写扩展来处理自己的协议,可能是更好的选择。在Python2.x中主要为和,这两个标准库是不可相互替代的。但是在Python3.x中将合并到了,这一点值得注意。
- 支持设置编码的函数,在模拟登陆的时候经常需要传递经过编码之后的参数,如果不想使用第三方库完成模拟登录,就必须使用到标准库中的。提供一些比较原始基础的方法而并没有,比如中的方法用来GET查询字符串的产生。
- 比较有优势的地方在于中可以接受一个Request类的实例来设置,来修改/设置Header头从而达到控制的header部分的目的,也可以修改用户代理,设置cookie等,但仅可以接受URL。这就意味着,如果你访问一个网站想更改(可以伪装你的浏览器),你就需要使用。模块没有加入函数以及等一系列quote和unquote功能,这个时候就需要的辅助。
因此Python2.x中,和两者搭配使用。
1、打开远程文件
几乎可以像打开本地文件一样打开远程文件,差别是只能使用读取模式,以及使用模块中的函数,而不是open(或file)。
如果连接到了网络,变量webpage将包含一个类似于文件的对象,这个对象与网页相关联。
注意:要在没有联网的情况下尝试使用模块urllib,可使用以打头的URL访问本地文件,如(别忘了对反斜杠进行转义)。
urlopen返回的类似于文件的对象支持方法:close、 read、readline和readlines,还支持迭代等。
假设要提取刚才所打开网页中链接About的相对URL, 可使用正则表达式 。
02、获取远程文件
函数返回一个类似于文件的对象,可从中读取数据。如果要让替你下载文件并将其副本存储在一个本地文件中,可使用。这个函数不返回一个类似于文件的对象,而返回一个格式为的元组,其中是本地文件的名称(由自动创建),而包含一些有关远程文件的信息(这里不会介绍headers, 如果你想更深入地了解它,请在有关urllib的标准库文档中查找urlretrieve)。如果要给下载的副本指定文件名,可通过第二个参数来提供。
这将获取Python官网的主页,并将其存储到文件中。如果你没有指定文件名,下载的副本将放在某个临时位置,可使用函数open来打开。但使用完毕后,你可能想将其删除以免占用磁盘空间。要清空这样的临时文件,可调用函数且不提供任何参数,它将负责替你完成清空工作。
一些实用的函数
除了通过URL读取和下载文件外,urllib还提供了一些用于操作URL的函数,如下所示(这里假设你对URL和CGI略知一二)。
- 返回一个字符串,其中所有的特殊字符(在URL中有特殊意义的字符)都已替换为对URL友好的版本(如将替换为),如果要将包含特殊字符的字符串用作URL很有用。参数safe是一个字符串(默认为),包含不应像这样对其进行编码的字符。
- 类似于quote,但也将空格替换为加号。
- :与相反。
- :与相反。
- 将映射(如字典)或由包含两个元素的元组(形如)组成的序列转换为“使用URL编码的”字符串。这样的字符串可用于CGI查询中(详细信息请参阅Python文档)。
一、
作为Python的标准库,基本上涵盖了基础的网络请求功能。
1。
中,这个模块主要负责构造和发起网络请求,并在其中加入Headers、Proxy等。
1. 发起GET请求
主要使用方法来发起请求:
在方法中传入字符串格式的url地址,则此方法会访问目标网址,然后返回访问的结果。
返回的结果会是一个对象,使用此对象的方法可以获取访问网页获得的数据。但是要注意的是,获得的数据会是bytes的二进制格式,所以需要一下,转换成字符串格式。
使用带参数的GET方法取回URL:
2. 发起请求
默认的访问方式是,当在方法中传入data参数时,则会发起请求。注意:传递的data数据需要为bytes格式。timeout参数还可以设置超时时间,如果请求时间超出,那么就会抛出异常。
使用带参数的POST方法:
3. 添加Headers
4. Request对象
如上所示,urlopen()方法中不止可以传入字符串格式的url,也可以传入一个Request对象来扩展功能,Request对象如下所示。
5. 添加Cookie
或者也可以把这个生成的opener使用方法来设置为全局的,之后使用urlopen方法发起请求时,都会带上这个cookie:
6. 设置Proxy代理
使用爬虫来爬取数据的时候,常常需要使用代理来隐藏我们的真实IP。
官方文档的例子:
7. 下载数据到本地
注:方法是Python2.x直接移植过来的方法,以后有可能在某个版本中弃用。
2。
在使用方法或者opener的方法发起请求后,获得的结果是一个对象。这个对象有一些方法和属性,可以让我们对请求返回的结果进行一些处理。
:获取响应返回的数据,只能使用一次。
:获取服务器返回的状态码。
:获取返回响应的响应报头。
:获取访问的url。
3。
是中用来解析各种数据格式的模块。
1. urllib.parse.quote
在url中,是只能使用ASCII中包含的字符的,也就是说,ASCII不包含的特殊字符,以及中文等字符都是不可以在url中使用的。而我们有时候又有将中文字符加入到url中的需求,例如百度的搜索地址:。之后的wd参数,则是我们搜索的关键词。那么我们实现的方法就是将特殊字符进行url编码,转换成可以url可以传输的格式,urllib中可以使用方法来实现这个功能。
如果需要将编码后的数据转换回来,可以使用方法。
2.
在访问url时,我们常常需要传递很多的url参数,而如果用字符串的方法去拼接url的话,会比较麻烦,所以urllib中提供了这个方法来拼接url参数。
4。
在urllib中主要设置了两个异常,一个是,一个是,是的子类。
还包含了三个属性:
- :请求的状态码
- :错误的原因
- :响应的报头
例子:
二、
Python2.x的一个例子:
Python3.x(整合之后的)的一个例子:
来自官方文档的几个例子:
GET一个URL:
使用基本的HTTP认证:
注:默认提供很多处理程序,包括代理处理程序,代理默认会被设置为环境变量所提供的。
一个使用代理的例子:
添加HTTP请求头部:
更改User-agent:
注:和、是http客户端协议的实现,通常不直接使用,是以为基础,是第三方库,比有更多特性。比较底层,一般使用的话用和即可。
三、Python3.X中使用整合后的
若只使用Python3.x,记住有个的库就行了。Pyhton2.x和Python3.x都有和, 它们不是标准库。提供线程安全连接池和文件post等支持,与及的关系不大。 自称,使用更简洁方便。
Python3.x中将合并到了,之后此包分成了以下几个模块:
- 用于打开和读取URL
- 用于处理前面request引起的异常
- 用于解析URL
- 用于解析robots.txt文件
Python3.x中,随着合入,一些常用的方法也发生了变化:
- 在Python2.x中使用——在Python3.x中会使用
- 在Python2.x中使用或(已弃用)——在Python3.x中会使用
- 在Python2.x中使用——在Python3.x中会使用
- 在Python2.x中使用——在Python3.x中会使用
- 在Python2.x中使用——在Python3.x中会使用
- 在Python2.x中使用——在Python3.x中会使用
- 异常处理:在Python2.x中使用——在Python3.x中会使用
注:在Python3.3后已经不能再用,所有全部用来代替。
和在Python2.x以及Python3.x的区别:
Python2.x中:
1、共同点:都可以直接用请求页面
2、不同点:有和进行编码和解码
3、对于error:
Python3.x中:
1、请求页面:
2、对于error:
几个官方例子:
GET一个URL:
PUT一个请求:
基本的HTTP认证:
使用proxy:
添加头部:
更改User-agent:
使用GET时设置URL的参数:
使用POST时设置参数:
指定proxy:
不使用proxy, 覆盖环境变量的proxy:
注:Python2.X中的被重命名为。
使用工具转换源码时, 会自动处理这几个库的导入.
总的来说, 使用Python3.x, 记住只有, 想要更简洁好用就用, 但不够通用。
四、
功能强大且易于使用,用于HTTP客户端的Python库。许多Python的原生系统已经开始使用。
提供了很多python标准库里所没有的重要特性:
- 线程安全
- 连接池
- 客户端SSL/TLS验证
- 文件分部编码上传
- 协助处理重复请求和HTTP重定位
- 支持gzip和deflate压缩编码
- 支持HTTP和SOCKS代理
- 100%测试覆盖率
1。安装
是一个第三方库,pip安装:
或者,可以从GitHub获取最新的源代码:
2。使用
主要使用连接池进行网络请求的访问,所以访问之前需要先创建一个连接池对象:
1.设置headers
通过方法向请求(request)中添加一些其他信息:
或者:在方法中,可以定义一个字典类型(dictionary),并作为headers参数传入:
2.设置url参数
对于GET等没有请求正文的请求方法,可以简单的通过设置fields参数来设置url参数。
3.设置代理
:中没有直接设置cookies的方法和参数,只能将cookies设置到headers中。
4.官网的一些介绍
请求(request)中的数据项(request data)可包括:
Headers
在request()方法中,可以定义一个字典类型(dictionary)并作为headers参数传入:
Query parameters
对于GET、HEAD和DELETE请求,可以简单的通过定义一个字典类型作为fields参数传入即可:
对于POST和PUT请求(request),需要手动对传入数据进行编码,然后加在URL之后:
Form data
对于PUT和POST请求(request),会自动将字典类型的field参数编码成表格类型.
JSON
在发起请求时,可以通过定义body参数并定义headers的Content-Type参数来发送一个已经过编译的JSON数据:
Files & binary data
使用multipart/form-data编码方式上传文件,可以使用和传入Form data数据一样的方法进行,并将文件定义为一个元组的形式:
文件名(filename)的定义不是严格要求的,但是推荐使用,以使得表现得更像浏览器。同时,还可以向元组中再增加一个数据来定义文件的MIME类型:
如果是发送原始二进制数据,只要将其定义为body参数即可。同时,建议对的参数进行设置:
Response content
The HTTPResponse object provides status, data, and header attributes:
JSON content
JSON content can be loaded by decoding and deserializing the data attribute of the request:
Binary content
The data attribute of the response is always set to a byte string representing the response content:
Note: For larger responses, it’s sometimes better to stream the response.
Using timeouts
使用timeout,可以控制请求的运行时间。在一些简单的应用中,可以将timeout参数设置为一个浮点数:
要进行更精细的控制,可以使用Timeout实例,将连接的timeout和读的timeout分开设置:
如果想让所有的request都遵循一个timeout,可以将timeout参数定义在PoolManager中:
当在具体的request中再次定义timeout时,会覆盖PoolManager层面上的timeout。
请求重试(Retrying requests):
urllib3可以自动重试幂等请求,原理和handles redirect一样。可以通过设置retries参数对重试进行控制。Urllib3默认进行3次请求重试,并进行3次方向改变。
给retries参数定义一个整型来改变请求重试的次数:
关闭请求重试(retrying request)及重定向(redirect)只要将retries定义为False即可:
关闭重定向(redirect)但保持重试(retrying request),将redirect参数定义为False即可:
要进行更精细的控制,可以使用retry实例,通过该实例可以对请求的重试进行更精细的控制。
例如,进行3次请求重试,但是只进行2次重定向:
You can also disable exceptions for too many redirects and just return the 302 response:
如果想让所有请求都遵循一个retry策略,可以在PoolManager中定义retry参数:
当在具体的request中再次定义retry时,会覆盖 PoolManager层面上的retry。
Errors & Exceptions
urllib3 wraps lower-level exceptions, for example:
See exceptions for the full list of all exceptions.
Logging
If you are using the standard library logging module urllib3 will emit several logs. In some cases this can be undesirable. You can use the standard logger interface to change the log level for urllib3’s logger:
五、
使用的是,它继承了的所有特性。有很大功能特性:
- 支持HTTP连接保持和连接池;
- 支持使用cookie保持会话;
- 支持文件上传;
- 支持自动确定响应内容的编码;
- 支持国际化的URL和POST数据自动编码。
是第三方类库,需要另外安装。
简单使用:
关于requests更详细的介绍,请参阅 https://blog.csdn.net/jiduochou963/article/details/
参考:
python中urllib, urllib2,urllib3, httplib,httplib2, request的区别 https://blog.csdn.net/permike/article/details/
Python网络请求urllib和urllib3详解 https://www.jianshu.com/p/f05d33475c78
Python–urllib3库详解1 https://www.cnblogs.com/KGoing/p/6146999.html
urllib2库.官方文档翻译 https://blog.csdn.net/u0/article/details/
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/3353.html