python爬虫内置库之urllib.request

urllib.request 模块定义了适用于在各种复杂情况下打开 URL (主要为 HTTP) 的函数和类 --- 例如基本和精简验证,重定向、cookies 及其它。

 

urllib.request.urlopenurldata = None,[ timeout,] *cafile = Nonecapath = Nonecadefault = Falsecontext = None 

打开URL url,可以是字符串或 Request对象。

data必须是指定要发送到服务器的其他数据的对象,或者None如果不需要此类数据。详情Request 请见。

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

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

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

可选的cafilecapath参数为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稍微修改的 对象。除了上面的三个新方法之外,msg属性包含与属性相同的信息reason ---服务器返回的原因短语---而不是文档中指定的响应头HTTPResponse

对于遗留URLopenerFancyURLopener类显式处理的FTP,文件和数据URL以及请求 ,此函数返回一个urllib.response.addinfourl对象。

引发URLError协议错误。

请注意,None如果没有处理程序处理请求,则可能会返回(尽管默认安装的global OpenerDirector用于UnknownHandler确保永远不会发生这种情况)。

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

urllib.urlopenPython 2.6及更早版本的遗留函数已经停止使用; urllib.request.urlopen()对应旧的urllib2.urlopen。通过传递字典参数来完成的代理处理urllib.urlopen可以通过使用ProxyHandler对象来获得 。

在 3.2 版更改: cafile and capath were added.

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

3.2 新版功能: data can be an iterable object.

在 3.3 版更改: cadefault was added.

在 3.4.3 版更改: context was added.

3.6版后已移除:cafilecapathcadefault不赞成使用上下文。请ssl.SSLContext.load_cert_chain()改为使用,或者 ssl.create_default_context()为您选择系统的可信CA证书。

urllib.request.install_opener开场白

安装OpenerDirector实例作为默认的全局开启工具。只有在你想让urlopen使用那个开启器时才需要安装开启器。否则,只需打电话OpenerDirector.open()而不是 urlopen()。代码不检查是否真实 OpenerDirector,任何具有适当接口的类都可以工作。

urllib.request.build_opener([ 代理...... ] )

返回一个OpenerDirector实例,它按照给定的顺序链接处理程序。handler s可以是实例,也可以是BaseHandler子类BaseHandler(在这种情况下,必须可以在没有任何参数的情况下调用构造函数)。以下类的实例将在前面的处理程序 S,除非处理器小号含有它们,将它们的它们的实例或亚类:ProxyHandler(如果检测到代理设置), ,UnknownHandlerHTTPHandler, HTTPDefaultErrorHandlerHTTPRedirectHandlerFTPHandler,。FileHandlerHTTPErrorProcessor

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

一个BaseHandler子类,还可以改变其handler_order 属性,修改其在处理程序列表中的位置。

urllib.request.pathname2url路径

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

urllib.request.url2pathname路径

将路径组件路径从百分比编码的URL 转换为路径的本地语法。这不接受完整的URL。此函数用于 unquote()解码路径

urllib.request.getproxies()

此帮助程序函数返回代理服务器URL映射的方案字典。它首先在环境中扫描<scheme>_proxy所有操作系统的名称不区分大小的变量,当它找不到它时,从Mac OS X的Mac OSX系统配置和Windows的Windows系统注册表中查找代理信息。如果小写和大写环境变量都存在(并且不同意),则首选小写。

注解

 

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

提供以下课程:

class urllib.request.Requesturldata = Noneheaders = {}origin_req_host = Noneunverifiable = Falsemethod = None 

此类是URL请求的抽象。

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

data必须是指定要发送到服务器的其他数据的对象,或者None如果不需要此类数据。目前,HTTP请求是唯一使用数据的请求。支持的对象类型包括字节,类文件对象和可迭代。如果没有 Content-Length,也没有Transfer-Encoding报头字段已经被设置,HTTPHandler将根据的类型来设置这些标题数据。 Content-Length将用于发送字节对象,而在中指定 Transfer-Encoding: chunkedRFC 7230,第3.3.1节将用于发送文件和其他迭代。

对于HTTP POST请求方法,数据应该是标准application / x-www-form-urlencoded格式的缓冲区。该urllib.parse.urlencode()函数采用2元组的映射或序列,并以此格式返回ASCII字符串。在用作数据参数之前,应将其编码为字节。

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

Content-Type如果存在data 参数,则应包含适当的标头。如果未提供此标头且数据 不是None,则将添加为默认值。Content-Type: application/x-www-form-urlencoded

最后两个参数仅对正确处理第三方HTTP cookie感兴趣:

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

无法核实的应表明该请求是否无法核实,如下所述RFC 2965。它默认为False。无法验证的请求是用户无法选择批准的URL。例如,如果请求是针对HTML文档中的图像,并且用户没有选择批准自动获取图像,则应该这样。

method应该是一个字符串,表示将使用的HTTP请求方法(例如'HEAD')。如果提供,则其值存储在 method属性中并由其使用get_method()。默认值是'GET'如果数据None'POST'以其他方式。子类可以通过method在类本身中设置属性来指示不同的默认方法 。

注解

 

如果数据对象无法多次传递其内容(例如,只能生成一次内容的文件或可迭代文件),则请求将无法按预期工作,并且会重试HTTP重定向或身份验证请求。该数据被发送到头部后马上HTTP服务器。图书馆不支持100次继续期望。

在 3.3 版更改: Request.method argument is added to the Request class.

在 3.4 版更改: Default Request.method may be indicated at the class level.

在3.6版更改:如果Content-Length没有提供错误并且数据既不None是字节对象也不引发错误。回过头来使用分块传输编码。

urllib.request.OpenerDirector

OpenerDirector类打开通过URL BaseHandler链接在一起秒。它管理处理程序的链接以及从错误中恢复。

urllib.request.BaseHandler

这是所有注册处理程序的基类 - 并且只处理简单的注册机制。

urllib.request.HTTPDefaultErrorHandler

一个定义HTTP错误响应的默认处理程序的类; 所有回复都变成了HTTPError例外。

urllib.request.HTTPRedirectHandler

一个处理重定向的类。

class urllib.request.HTTPCookieProcessorcookiejar = None 

一个处理HTTP Cookie的类。

class urllib.request.ProxyHandlerproxies = None 

导致请求通过代理。如果给出了代理,则它必须是将协议名称映射到代理URL的字典。默认设置是从环境变量中读取代理列表 <protocol>_proxy。如果未设置代理环境变量,则在Windows环境中,从注册表的“Internet设置”部分获取代理设置,在Mac OS X环境中,从OS X系统配置框架检索代理信息。

要禁用自动检测的代理,请传递一个空字典。

该 no_proxy环境变量可用于指定不应通过代理访问的主机; 如果设置,它应该是逗号分隔的主机名后缀列表:port,例如,可选择附加 cern.ch,ncsa.uiuc.edu,some.host:8080

注解

 

HTTP_PROXY如果REQUEST_METHOD设置了变量,将被忽略; 请参阅文档getproxies()

urllib.request.HTTPPasswordMgr

保留映射数据库 。(realm, uri) -> (user, password)

urllib.request.HTTPPasswordMgrWithDefaultRealm

保留映射数据库 。一个领域 被认为是一个包罗万象的领域,如果没有其他领域适合的话就会被搜索。(realm,uri) -> (user, password)None

urllib.request.HTTPPasswordMgrWithPriorAuth

其变体HTTPPasswordMgrWithDefaultRealm还有一个映射数据库。BasicAuth处理程序可以使用它来确定何时立即发送身份验证凭据,而不是先等待响应。uri -> is_authenticated401

3.5 新版功能.

class urllib.request.AbstractBasicAuthHandler

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值