前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫核心模块urllib的学习

Python爬虫核心模块urllib的学习

作者头像
Python中文社区
发布2018-01-31 12:11:39
7630
发布2018-01-31 12:11:39
举报
文章被收录于专栏:Python中文社区Python中文社区

因为在玩Python challenge的时候,有用过这个模块,而且学习这个模块之后也对系统学习网络爬虫有用。

当时查了各种资料学习,没有碰官网文档(因为还是对英语有抗拒性),但是还是官方的文档最具权威和学习价值,因此想要此次翻译官方文档的同时,锻炼自己的英语能力,也对urllib模块加深理解。

因为是为了自己复习起来方便~所以就不一句英语一句中文的对照着翻了,有兴趣看原版的,自己点官方文档吧~

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模块之间的区别

在python中,urllib和urllib2不可相互替代的。整体来说,urllib2是urllib的增强,但是urllib中有urllib2中所没有的函数。urllib2可以用urllib2.openurl中设置Request参数,来修改Header头。如果你访问一个网站,想更改User Agent(可以伪装你的浏览器),你就要用urllib2、urllib支持设置编码的函数,urllib.urlencode,在模拟登陆的时候,经常要post编码之后的参数,所以要想不使用第三方库完成模拟登录,你就需要使用urllib。

urllib一般和urllib2一起搭配使用

官方文档地址

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

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

urllib整体介绍

翻译的对应的是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

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被补充。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
轻量应用服务器
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档