urllib.request 模块-urlopen方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了urllib.request 模块-urlopen方法相关的知识,希望对你有一定的参考价值。

参考技术A urllib.request 模块定义了以下函数:

urllib.request.urlopen( url , data=None , [ timeout , ] * , cafile=None , capath=None , cadefault=False , context=None )

参数 :

打开 url 链接,可以是字符串或者是Request对象。

data 必须是一个定义了向服务器所发送额外数据的对象,或者如果没有必要数据的话,就是None值。可以查阅Request获取详细信息。

url.request模块在HTTP请求中使用了HTTP/1.1,并且包含了Connection:close头部。

可选的 timeout 参数指定阻止诸如连接尝试等操作的超时时间(以秒为单位)(如果未指定,将使用全局默认超时设置)。这实际上只适用于HTTP,HTTPS和FTP连接。

如果指定了 context ,则它必须是描述各种SSL选项的ssl.SSLContext实例。 有关更多详细信息,请参阅HTTPSConnection。

可选的 cafile 和 capath 参数为HTTPS请求指定一组可信的CA证书。 cafile 应指向包含一系列CA证书的单个文件,而 capath 应指向散列证书文件的目录。 更多信息可以在ssl.SSLContext.load_verify_locations()中找到。

cadefault 参数被忽略。

返回值:

该函数总是返回一个可以作为 context manager 使用的对象,并且具有方法,例如;

geturl()- 返回检索的资源的URL,通常用于确定是否遵循重定向;

info()- 以email.message_from_string()实例的形式返回页面的元信息(如headers)(可快速参考HTTP Headers);

getcode()- 返回响应的HTTP状态码。

对于HTTP和HTTPS URL,此函数返回稍微修改的http.client.HTTPResponse对象。 除上述三种新方法之外,msg属性还包含与reason属性(服务器返回的原因短语)相同的信息,而不是HTTPResponse文档中指定的响应标头。

对于由传统URLopener和FancyURLopener类明确处理的FTP,文件和数据URL和请求,此函数返回一个urllib.response.addinfourl对象。

在协议错误上引发URLError。

请注意,如果没有处理请求的handler,则可能返回None(尽管默认安装的全局OpenerDirector使用UnknownHandler来确保永不发生这种情况)。

另外,如果检测到代理设置(例如,如果设置了诸如http_proxy的* _proxy环境变量),则默认安装ProxyHandler,并确保通过代理处理请求。

使用案例

1、简单读取网页信息

2、使用request

urllib.request.Request(url, data=None, headers=, method=None)

使用request()来包装请求,再通过urlopen()获取页面。

3、发送数据,以登录知乎为例

4、http错误

5、异常处理

6、http认证

7、使用代理

8、超时

python Python模块:urllib:request,urlopen

#!/usr/bin/env python3

from urllib.request import Request, urlopen

req = Request('http://www.debian.org')
req.add_header('Accept-Language', 'sv')
response = urlopen(req)
for line in response:
    print(line.decode('utf-8'))
print(req.header_items())

以上是关于urllib.request 模块-urlopen方法的主要内容,如果未能解决你的问题,请参考以下文章

python Python模块:urllib:request,urlopen和gzip

urllib

爬虫之Urllib

Python 2.7.10 错误“从 urllib.request 导入 urlopen”没有名为请求的模块

urllib 模块使用简例

urllib2模块使用