Python 3.x版本中urllib和urllib2模块的官方文档翻译与学习指南

因为我在玩Python挑战的时候就用过这个模块,学习了这个模块之后,对于系统学习网络爬虫也会很有用。

Python 3.x版本中urllib和urllib2模块的官方文档翻译与学习指南

当时我查了各种学习资料,没有碰官网文档(因为我对英语还是有抵触的),但是官方文档还是最权威、最有价值的学习,所以我想锻炼一下英语能力这次在翻译官方文件的时候。 ,对urllib模块也有了更深入的了解。

因为是为了方便自己复习,所以不会一句英文一句中文的看。如果您有兴趣阅读原版,请自行点击官方文档。

如果翻译有什么不足的地方请多多指教。

——我就是分割线——-

Python 3.x 之后的 urllib 和 urllib2

Python现已发布至3.5.2

Python 3以后的版本中,urllib2模块不再单独存在(即导入urllib2时系统提示该模块不存在)。 urllib2 合并到 urllib 中,称为 urllib.request 和 urllib.error。

urllib整个模块分为urllib.request、urllib.parse、urllib.error。

例子:

其中 urllib2.urlopen() 变为 urllib.request.urlopen()

urllib2.Request() 变为 urllib.request.Request()

urllib 和 urllib2 模块之间的区别

在 Python 中,urllib 和 urllib2 不可互换。

总体来说,urllib2是urllib的增强,但是urllib有urllib2中没有的功能。

urllib2可以通过设置urllib2.openurl中的Request参数来修改Header头。如果您访问网站并想要更改用户代理(它可以伪装您的浏览器),则需要使用 urllib2。

urllib 支持一个设置编码的函数,urllib.urlencode。模拟登录时,往往需要post编码后的参数,所以如果想在不使用第三方库的情况下完成模拟登录,就需要使用urllib。

urllib一般和urllib2一起使用

官方文档地址

翻译的是Python 3.5.2版本,对应urllib

urllib整体介绍

原文地址:

翻译对应于21.6。 urllib.request — 用于打开 URL 的可扩展库

urllib- - - - - URL处理模块

源代码:Lib/urllib/

urllib 是一个包,它收集了几个处理 URL 的模块:

urllib.request打开并浏览url中的内容

urllib.error 包含 urllib.request 发生的错误或异常

urllib.parse 解析 url

urllib.robotparser 解析 robots.txt 文件

urllib.请求

原文地址:

urllib.request — 用于打开 url 的可扩展库

源代码:Lib/urllib/request.py

urllib.request 模块定义了帮助在复杂世界中打开 URL(主要是 HTTP)的方法和类 - 基本和摘要身份验证、重定向、cookie 等。

————-urllib.request模块定义了以下函数: ————–

urllib.request.urlopen()

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

打开网址。这可以是字符串或 Request 对象。

data 必须是一个字节对象,指定要发送到服务器的附加数据或 None。如果不需要这样的数据,则数据也可以是可迭代对象,在这种情况下,必须首先指定内容的长度。目前HTTP 是唯一一种以这种方式请求数据的协议。当提供 data 参数时,HTTP 请求将执行 POST 请求而不是 GET 请求。

在标准应用程序中,数据应以 x-www-form-urlencoded 格式缓冲。 urllib.parse.urlencode() 函数接受映射或序列集合并返回 ASCII 文本字符串格式。在用作数据参数之前,应将其编码为字节。

urllib.request 模块使用 HTTP/1.1 协议,并在 HTTP 请求标头中包含请求 Connection:close。

可选的第二个超时参数timeout用于阻塞操作,例如连接请求(如果未指定,将使用全局默认超时设置)。这实际上仅适用于 HTTP、HTTPS 和 FTP 连接。

如果指定了 context,则它必须是描述各种 SSL 选项的 ssl.SSLContext 实例。单击 HTTPSConnection 查看更多详细信息。

可选的 cafile 和 capath 参数指定一组受 HTTPS 请求信任的 CA 证书。 cafile 应指向包含 CA 证书包的文件,capath 应指向包含哈希证书文件的目录。单击 ssl.SSLContext.load_verify_locations() 了解更多信息。

cadefault 参数被忽略。

该函数始终返回一个对象,例如上下文管理器,并提供这些方法

geturl()——返回URL的资源检索,常在重定向后使用

info() - 返回有关页面的元信息,例如构成 email.message_from_string() 实例的标题(请参阅快速参考 HTTP 标头)

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

对于 HTTP 和 HTTPS URL,此函数返回的 http.client.HTTPResponse 对象略有不同。除了上述三个新方法之外,此消息属性包含与原因属性(服务器返回的原因)相同的信息,而不是响应标头,如 HTTPResponse 文档中指定的那样。

FTP、文件和数据请求 URL 并显式处理 URLopener 和 FancyURLopener 类,此函数返回 urllib.response.addinfourl 对象。

urllib.request.urlopen() 将在 URLError 中抛出协议错误。

请注意,当没有处理程序来处理请求时,可能会返回 None(尽管 OpenerDirector 是默认全局安装的,并使用 UnknownHandler 来确保不会发生这种情况)。

此外,如果检测到代理设置(例如,当设置了 *_proxy 环境变量(如 http_proxy)时),默认情况下会安装 ProxyHandler,并确保通过代理处理请求。

旧版 urllib.urlopen 已从 Python 2.6 及更早版本中停止使用; urllib.request.urlopen() 对应于旧的 urllib2.urlopen。代理处理是通过字典参数完成的。 urllib.urlopen 可以使用 ProxyHandler 对象。

3.2版本的变化:添加了cafile和capath。

版本 3.2 中进行了更改:如果可能,现在支持 HTTPS 虚拟主机(即,如果 ssl.HAS_SNI 为 true)。

在新版本3.2中:数据可以是可迭代对象。

版本 3.3 中的更改:添加了 cadefault。

版本 3.4.3 中的更改:添加了上下文。

urllib.request.install_opener(开启器)

安装 OpenerDirector 实例作为全局默认开启程序。如果你想让urlopen使用这个opener,就需要安装一个opener;否则,只需调用 OpenerDirector.open() 而不是 urlopen()。这样,代码将不会检查真正的 OpenerDirector,并且任何类的适当接口都将起作用。

urllib.request.build_opener([处理程序, …])

返回处理程序 OpenerDirector 实例的顺序链。处理程序可以是 BaseHandler 的实例,也可以是 BaseHandler 的子类(在这种情况下,必须调用不带参数的构造函数)。以下类的实例将被处理程序抢占,除非处理程序包含它们或其子类的实例:ProxyHandler(如果检测到代理设置)、UnknownHandler、HTTPHandler、HTTPDefaultErrorHandler、HTTPRedirectHandler、FTPHandler、FileHandler、HTTPErrorProcessor。

如果Python安装了SSL支持(即如果可以导入ssl模块),HTTPSHandler也会被添加。

BaseHandler 子类还可以通过更改其 handler_order 属性来修改其在处理程序列表中的位置。

urllib.request.pathname2url(路径)

使用 URL 的路径组件从路径的本地语法形式将路径名转换为路径。这不会产生完整的 URL。它将返回引用 quote() 函数的值。

urllib.request.url2pathname(路径)

将路径组件转换为本地路径的语法。这不接受完整的 URL。该函数使用 unquote() 解码过程。

urllib.request.getproxies()

此辅助函数返回将 URL 映射到代理服务器的调度字典。以不区分大小写的方式跨所有操作系统扫描指定的环境变量 _proxy,当找不到时,从 Mac OS X 系统配置和 Windows 系统注册表中查找代理信息。如果大写和小写环境变量都存在(或不同),则小写优先。

请注意,如果环境变量REQUEST_METHOD已设置,这通常表明您正在运行CGI脚本,则环境变量HTTP_PROXY(大写_PROXY)将被忽略。这是因为客户端可以使用此变量来注入“Proxy:”HTTP 标头。如果需要在 CGI 环境中使用 HTTP 代理,请显式使用 ProxyHandler,或确保变量名称为小写(或至少具有 _proxy 后缀)。

——提供以下类别:————————————

类 urllib.request.Request(url, data=None, headers={}, origin_req_host=None, 无法验证=False, method=None)

该类是一个抽象的 URL 请求。

url 应该是包含有效 url 的字符串。

data 必须是一个字节对象,指定要发送到服务器的附加数据或 None。如果不需要这样的数据,则数据也可以是可迭代对象,在这种情况下,必须首先指定内容的长度。目前HTTP 是唯一一种以这种方式请求数据的协议。当提供 data 参数时,HTTP 请求将执行 POST 请求而不是 GET 请求。

在标准应用程序中,数据应以 x-www-form-urlencoded 格式缓冲。 urllib.parse.urlencode() 函数接受映射或序列集合并返回 ASCII 文本字符串格式。在用作数据参数之前,应将其编码为字节。

如果使用每个键和值作为参数调用 add_header(),则 headers 应该是一个字典。这通常用于“欺骗” User-Agent 标头的值,因为浏览器使用它来识别自身 - 一些常见的 HTTP 服务器只允许来自浏览器的请求,而不允许来自脚本的请求。例如,Mozilla Firefox 可能会将自己标识为“Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11”。而urllib的默认用户代理字符串在Python 2.6()中是“Python-urllib/2.6”。

使用数据参数的 Content-Type 标头示例将发送字典 {"Content-Type":"application/x-www-form-urlencoded"}。

最后两个参数只是正确处理第三方 HTTP cookie:

origin_req_host 应请求源主机事务,如 RFC 2965 中定义。它默认为 http.cookiejar.request_host(self)。这是由用户发起的原始请求的主机名或 IP 地址。例如。如果请求是针对 HTML 文档中的图像,则这应该是包含该图像的页面的请求主机。

不可验证 指示请求是否不可验证,如 RFC 2965 所定义。默认为 False。无法验证的请求 URL 不允许用户选择。例如,如果请求是针对 HTML 文档中的图像,并且用户没有选择自动获取图像,则应该是这样。

该方法应该是一个字符串,表示要使用的 HTTP 请求方法(例如“HEAD”)。如果提供,其值将存储在 method 属性中并与 get_method() 一起使用。子类可以通过设置类本身的方法属性来指示默认方法。

3.3版本的变化:Request.method参数被添加到请求类中。

版本 3.4 中的更改:默认的 Request.method 可能会在类级别显示。

类 urllib.request.OpenerDirector

OpenerDirector 类打开 url 并通过 BaseHandler 将它们连接在一起。它管理处理程序连接并从错误中恢复。

类 urllib.request.BaseHandler

这是所有注册处理程序的基类

类 urllib.request.HTTPRedirectHandler

处理重定向的类

类 urllib.request.HTTPCookieProcessor(cookiejar=None)

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

34阅读

外国教程python,python编程教学视频

2026年09月02日

28阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

22阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

28阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

23阅读