设为首页 收藏本站
查看: 1258|回复: 0

[经验分享] python中urllib和urllib2小结

[复制链接]

尚未签到

发表于 2018-8-15 07:22:28 | 显示全部楼层 |阅读模式
  原文来自网络摘抄,参考网址:
  http://6226001001.blog.51cto.com/9243584/1911472
  主要对原文进行了缩减,方便查看,勿喷,谢谢。
  5 主要功能
  request处理客户端的请求
  response处理服务端的响应
  parse会解析url
  下面讨论的是request
  urllib.request模块定义了一些打开URLs(一般是HTTP协议)复杂操作像是basic 和摘要模式认证,重定向,cookies等的方法和类。这个模块式模拟文件模块实现的,将本地的文件路径改为远程的url。因此函数返回的是类文件对象(file-like object)
  urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
  url可以是一个字符串形式或者Request 对象
  如果data参数有值就是用post方式响应否则默认为GET 方式
  urllib.request 模块使用HTTP/1.1 的无连接的状态协议
  5.2 urlopen()函数返回类文件对象,提供以下内建方法:
  read() , readline() ,readlines() , fileno() , close() 这些方法的使用方式与文件对象完全一样
  info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息
  getcode():返回Http状态码。(详情参考https://tools.ietf.org/html/rfc7231#section-6)
  如果是http请求:
  1xx(informational):请求已经收到,正在进行中
  2xx(successful):请求成功接收,解析,完成
  3xx(Redirection):需要重定向
  4xx(Client Error):客户端问题,请求存在语法错误,网址未找到
  5xx(Server Error):服务器问题
  geturl():返回请求的url
  5.3 urllib2 简介
  1:与urllib相比,显著区别之处在于:
  1) urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,用urllib时不可以伪装User Agent字符串等。
  2) urllib提供urlencode方法用来encode发送的data,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。
  2: urllib2 常用方法
  2.1  urllib2.urlopen
  urlopen()是最简单的请求方式,它打开url并返回类文件对象,并且使用该对象可以读取返回的内容
  urllib2.urlopen(url[, data][, timeout])
  参数:
  url: 可以是包含url的字符串,也可以是urllib2.request类的实例。
  data: 是经过编码的post数据(一般使用urllib.urlencode()来编码)。
  没有data参数时为GET请求,设置data参数时为POST请求
  timeout: 是可选的超时期(以秒为单位),设置请求阻塞的超时时间,如果没有设置的话,会使用全局默认timeout参数,该参数只对HTTP、HTTPS、FTP生效
  假设urlopen()返回的文件对象u,它支持下面的这些常用的方法:
  u.read([nbytes]) 以字节字符串形式读取nbytes个数据
  u.readline() 以字节字符串形式读取单行文本
  u.readlines() 读取所有输入行然后返回一个列表
  u.close() 关闭链接
  u.getcode() 返回整数形式的HTTP响应代码,比如成功返回200,未找到文件时返回404
  u.geturl() 返回所返回的数据的实际url,但是会考虑发生的重定向问题
  u.info() 返回映射对象,该对象带有与url关联的信息。
  对HTTP来说,返回的服务器响应包含HTTP包头。
  对于FTP来说,返回的报头包含'content-length'。
  对于本地文件,返回的报头包含‘content-length’和'content-type'字段。
  注意:
  类文件对象u以二进制模式操作。如果需要以文本形式处理响应数据,则需要使用codecs模块或类似
  方式解码数据。
  2.2  urllib2.request
  新建Request实例
  Request (url [data,headers[,origin_req_host ,[unverifiable]]]])
  说明:
  对于比较简单的请求,urlopen()的参数url就是一个代表url的,但如果需要执行更复杂的操作,如修改HTTP报头,可以创建Request实例并将其作为url参数
  参数:
  url: 为url字符串,
  data: 是伴随url提交的数据(比如要post的数据)。不过要注意,提供data参数时,它会将HTTP请求从'GET'改为‘POST’。
  headers: 是一个字典,包含了可表示HTTP报头的键值映射(即要提交的header中包含的内容)。
  origin_req_host: 通常是发出请求的主机的名称,如果请求的是无法验证的url(通常是指不是用户直接输入的url,比如加载图像的页面中镶入的url),则后一个参数unverifiable设为TRUE
  假设Request实例r,其比较重要的方法有下面几个:
  r.add_data(data) 向请求添加数据。如果请求是HTTP请求,则方法改为‘POST’。
  data是向指定url提交的数据,要注意该方法不会将data追教导之前已经设置的任何数据上,而是使用现在的data替换之前的。
  r.add_header(key, val) 向请求添加header信息,key是报头名,val是报头值,两个参数都是字符串。
  r.addunredirectedheader(key,val) 作用基本同上,但不会添加到重定向请求中。
  r.set_proxy(host, type) 准备请求到服务器。使用host替换原来的主机,使用type替换原来的请求类型。
  2.3  异常处理
  不能处理一个respons时,urlopen抛出一个urlerror
  urllib2.URLError:
  urllib2.HTTPError:
  HTTPerror是HTTP URL在特别的情况下被抛出的URLError的一个子类。
  urlerror:
  通常,urlerror被抛出是因为没有网络 连接(没有至特定服务器的连接)或者特定的服务器不存在。在这种情况下,含有reason属性的异常将被抛出,以一种包含错误代码 和文本错误信息的tuple形式。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551894-1-1.html 上篇帖子: python之day1 下篇帖子: python3-数据类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表