热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python3中的urllib.request模块

Python3.x版本后的urllib和urllib2现在的Python已经出到了3.5.2在Python3以后的版本中,urllib2这个模块已经不单独存在(也就是说当你impo

Python 3.x版本后的urllib和urllib2

现在的Python已经出到了3.5.2

在Python 3以后的版本中,urllib2这个模块已经不单独存在(也就是说当你import 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模块之间的区别
  1. 在python中,urllib和urllib2不可相互替代的。

  2. 整体来说,urllib2是urllib的增强,但是urllib中有urllib2中所没有的函数。

  3. urllib2可以用urllib2.openurl中设置Request参数,来修改Header头。如果你访问一个网站,想更改User Agent(可以伪装你的浏览器),你就要用urllib2.

  4. urllib支持设置编码的函数,urllib.urlencode,在模拟登陆的时候,经常要post编码之后的参数,所以要想不使用第三方库完成模拟登录,你就需要使用urllib。

  5. urllib一般和urllib2一起搭配使用

官方文档地址

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

https://docs.python.org/3.5/library/urllib.html

urllib整体介绍

原地址:https://docs.python.org/3.5/library/urllib.html

翻译的对应的是21.6. urllib.request — Extensible library for opening URLs

urllib- – – – – – URL处理模块

源代码:Lib / urllib /

urllib是一个包,收集几个模块来处理网址:

urllib.request打开和浏览url中内容 
urllib.error包含从 urllib.request发生的错误或异常 
urllib.parse解析url 
urllib.robotparser解析 robots.txt文件

urllib.request

原地址: 
https://docs.python.org/3.5/library/urllib.request.html#module-urllib.request

urllib.request — 为打开url提供的可扩展类库

源代码:Lib / urllib / request.py

urllib.request模块定义了方法和类,帮助打开url(主要是HTTP)在一个复杂的世界——基本和摘要式身份验证,重定向,COOKIEs等等。

————-urllib.request模块定义了以下功能:—————–

urllib.request.urlopen()

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

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

数据必须是一个字节对象指定额外的数据发送到服务器或 None。如果没有这样的数据是必要的,数据也可能是一个iterable对象而且在这种情况下必须在最开始时指定内容的长度。目前HTTP是唯一一个这样请求数据的,当数据参数被提供时,HTTP请求将会执行POST请求而不是GET请求。

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

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

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

如果context被指定,它必须是一个 ssl.SSLContext实例描述各种SSL选项。点击HTTPSConnection查看更多细节。

可选cafile和capath参数指定一组被HTTPS请求信任的CA证书。cafile应该指向一个文件包含CA证书的包,而capath应该指向一个散列的证书文件的目录。点击ssl.SSLContext.load_verify_locations()查看更多的信息。

cadefault参数被忽略。

这个函数始终返回一个对象,像context(上下文) 管理者并提供这些方法

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

  • info()——返回页面的元信息,如标题,组成 email.message_from_string(的)实例(见快速参考HTTP头)

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

为HTTP和HTTPS url,这个函数返回的一个 http.client.HTTPResponse对象略有不同。除了上面的三种新方法中,这个message属性包含相同的信息像reason属性——由服务器返回的原因——而不是响应头,因为它在文档中指定 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是真的)。

在新的3.2版本:数据可以是一个iterable对象。

3.3版本的变化:cadefault被补充。

3.4.3版本的变化:context被补充。

urllib.request.install_opener(opener)

安装一个 OpenerDirector实例作为全球默认的opener 。安装一个opener 必要的,如果你想让urlopen使用这个opener ;否则,简单地调用 OpenerDirector.open()而不是 urlopen()。这样代码不会检查一个真实的 OpenerDirector并且任何类的适当的接口都可以运作。

urllib.request.build_opener([handler, …])

返回一个顺序的链的处理程序 OpenerDirector的实例。处理程序可以是BaseHandler的实例,或者 BaseHandler的子类(在这种情况下,必须调用没有参数的构造函数)。下面这些类的实例将提前处理程序,除非处理程序包含它们,或者它们子类的实例:ProxyHandler(如果检测到代理设置), UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor.

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

一个 BaseHandler子类也可以通过改变它的 handler_order属性来修改它再处理程序列表中的位置。

urllib.request.pathname2url(path)

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

urllib.request.url2pathname(path)

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

urllib.request.getproxies()

这个helper函数返回一个日程表dictionary 去代理服务器的URL映射。扫描指定的环境变量 _proxy大小写不敏感的方法,对所有的操作系统,当它不能找到它,从Mac OS X的Mac OSX系统配置和Windows系统注册表中寻找代理信息。如果两个大写和小写环境变量存在(或不一样),小写优先。

请注意,如果环境变量 REQUEST_METHOD已被设置,这通常表明你在CGI脚本运行环境,此时环境变量 HTTP_PROXY(大写 _PROXY)将被忽略。这是因为该变量可以被客户端使用注射“代理:”HTTP头。如果你需要使用一个HTTP代理在CGI环境中,要么使用 ProxyHandler明确,或者确保变量名小写(或至少是 _proxy后缀)。

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

类 urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

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

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

数据必须是一个字节对象指定额外的数据发送到服务器或 None。如果没有这样的数据是必要的,数据也可能是一个iterable对象而且在这种情况下必须在最开始时指定内容的长度。目前HTTP是唯一一个这样请求数据的,当数据参数被提供时,HTTP请求将会执行POST请求而不是GET请求。

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

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

一个Content-Type header的例子 用数据论证将发送一个字典 {“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()。通过设置子类可能表明一个默认的方法 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)

一个类来处理HTTP COOKIE。

类 urllib.request.ProxyHandler(proxies=None)

导致请求通过一个代理。如果代理是给定的,它必须是一个字典的代理协议名称映射到url。默认值是从环境变量的列表 _proxy中读取代理。如果没有代理设置环境变量,那么在Windows环境中代理设置了从注册表部分的网络设置,在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还有一个数据库 uri -> is_authenticated的映射。可以使用BasicAuth处理程序来确定当发送身份验证凭证立即而不是等待 401响应。

类 urllib.request.AbstractBasicAuthHandler(password_mgr=None)

这是mixin类,帮助与HTTP身份验证,远程主机和代理。果有password_mgr,应该是兼容 HTTPPasswordMgr的。请参阅部分 HTTPPasswordMgr对象必须支持的接口信息。如果passwd_mgr还提供了 is_authenticated和 update_authenticated方法(见 HTTPPasswordMgrWithPriorAuth对象),然后处理程序将使用 is_authenticated结果对于一个给定的URI来决定是否发送请求的身份验证凭证。如果 is_authenticated返回 TrueURI,凭证发送。如果 is_authenticated是 False凭证不发送,然后如果 401收到响应请求发送身份验证凭证。如果身份验证成功, update_authenticated被称为设置 is_authenticated TrueURI,这样后续请求的URI或任何super-URIs将自动包括身份验证凭证。

在新的3.5版本:添加 is_authenticated支持。

类 urllib.request.HTTPBasicAuthHandler(password_mgr=None)

与远程主机处理身份验证。如果有password_mgr,应该是兼容HTTPPasswordMgr的。请参阅部分 HTTPPasswordMgr对象必须支持的接口信息。HTTPBasicAuthHandler将提高 ValueError当面对一个错误的身份验证方案。

类 urllib.request.ProxyBasicAuthHandler(password_mgr=None)

处理与代理身份的验证。如果有password_mgr,应该是兼容 HTTPPasswordMgr的。请参阅部分 HTTPPasswordMgr对象必须支持的接口信息。

类urllib.request.AbstractDigestAuthHandler(password_mgr=None)

这是mixin类,帮助与HTTP身份验证,远程主机和代理。password_mgr,如果有,应该是兼容的 HTTPPasswordMgr;请参阅部分 HTTPPasswordMgr对象必须支持的接口信息

类urllib.request.HTTPDigestAuthHandler(password_mgr=None)

与远程主机处理身份验证。如果有password_mgr,应该是兼容 HTTPPasswordMgr的;请参阅部分 HTTPPasswordMgr对象必须支持的接口信息。摘要式身份验证处理程序和基本身份验证处理器都是补充说,摘要式身份验证总是尝试第一次。如果主机返回一个40 x再次回应,它发送到基本身份验证处理程序来处理。这个处理程序方法将提高 ValueError当面对除了消化或基本身份验证方案。

3.3版本的变化:提高 ValueError不支持的身份验证方案。

类urllib.request.ProxyDigestAuthHandler(password_mgr=None)

处理与代理身份验证。如果有password_mgr,应该是兼容 HTTPPasswordMgr的;请参阅部分 HTTPPasswordMgr对象必须支持的接口信息

类 urllib.request.HTTPHandler

一个类来处理HTTP url

类 urllib.request.HTTPSHandler(debuglevel=0, cOntext=None, check_hostname=None)

一个类来处理开放的HTTPS url。在context 文和check_hostname有相同的意义 http.client.HTTPSConnection.

3.2版本的变化:context and check_hostname被补充。

类 urllib.request.FileHandler

打开本地文件

类 urllib.request.DataHandler

开放数据的url

类 urllib.request.FTPHandler

开放的FTP url

类 urllib.request.CacheFTPHandler

打开FTP url,保持打开的FTP连接缓存来减少延迟

类 urllib.request.UnknownHandler

全方位类处理未知的url。

类 urllib.request.HTTPErrorProcessor

HTTP错误响应过程。


推荐阅读
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • Python爬虫入门:深入解析HTTP协议与Requests库的应用
    Python爬虫入门:深入解析HTTP协议与Requests库的应用 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 《精通 jQuery》第六章:深入解析与实战应用
    《精通 jQuery》第六章:深入解析与实战应用本章详细探讨了 Ajax 技术的核心机制及其实际应用。Ajax 通过 XMLHttpRequest 对象实现客户端与服务器之间的异步数据交换,从而在不重新加载整个页面的情况下更新部分内容。这种技术不仅提升了用户体验,还提高了应用的响应速度和效率。此外,本章还介绍了如何利用 jQuery 简化 Ajax 操作,并提供了多个实战案例,帮助读者更好地理解和掌握这一重要技术。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 本文深入探讨了Ajax的工作机制及其在现代Web开发中的应用。Ajax作为一种异步通信技术,改变了传统的客户端与服务器直接交互的模式。通过引入Ajax,客户端与服务器之间的通信变得更加高效和灵活。文章详细分析了Ajax的核心原理,包括XMLHttpRequest对象的使用、数据传输格式(如JSON和XML)以及事件处理机制。此外,还介绍了Ajax在提升用户体验、实现动态页面更新等方面的具体应用,并讨论了其在当前Web开发中的重要性和未来发展趋势。 ... [详细]
  • 本文深入探讨了HTTP头部中的Expires与Cache-Control字段及其缓存机制。Cache-Control字段主要用于控制HTTP缓存行为,其在HTTP/1.1中得到了广泛应用,而HTTP/1.0中主要使用Pragma:no-cache来实现类似功能。Expires字段则定义了资源的过期时间,帮助浏览器决定是否从缓存中读取资源。文章详细解析了这两个字段的具体用法、相互关系以及在不同场景下的应用效果,为开发者提供了全面的缓存管理指南。 ... [详细]
  • 本文详细解析了 Python 2.x 版本中 `urllib` 模块的核心功能与应用实例,重点介绍了 `urlopen()` 和 `urlretrieve()` 方法的使用技巧。其中,`urlopen()` 方法用于发送网络请求并获取响应内容,而 `urlretrieve()` 方法则用于下载文件并保存到本地。文章通过具体示例展示了这两个方法在实际开发中的应用场景,帮助读者更好地理解和掌握 `urllib` 模块的使用。 ... [详细]
  • 深入解析HTTP网络请求API:从基础到进阶的全面指南
    本文全面解析了HTTP网络请求API,从基础到进阶,详细介绍了Android平台上的两种原生API——HttpUrlConnection和HttpClient。这两种API通过对底层Socket的封装,提供了高效、灵活的网络通信功能。文章不仅涵盖了基本的使用方法,还深入探讨了性能优化、错误处理和安全性等方面的高级主题,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 本文深入探讨了ASP.NET中ViewState、Cookie和Session三种状态管理技术的区别与应用场景。ViewState主要用于保存页面控件的状态信息,确保在多次往返服务器过程中数据的一致性;Cookie则存储在客户端,适用于保存少量用户偏好设置等非敏感信息;而Session则在服务器端存储数据,适合处理需要跨页面保持的数据。文章详细分析了这三种技术的工作原理及其优缺点,并提供了实际应用中的最佳实践建议。 ... [详细]
author-avatar
xwt4818386
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有