当前位置: 首页 > 后端技术 > Python

Pythonurllib请求捡起

时间:2023-03-26 14:29:50 Python

pythonurllib请求介绍urllib.request:打开和读取URL和很多python模块一样,urllib.request也为我们提供了:1.面向过程2.面向对象。.(面向过程一般是基于面向对象底层实现的)在默认HTTP访问的情况下,面向过程urllib.request.urlopen(url,data=None)其中url为字符串或Reuqest对象;data就是所谓的表单数据,在urllib.request模块中对其表单有一定的规定。如果提供该参数,则http请求报文为post,如果不提供,则为get。该函数返回一个类文件对象,对象有read、readline、readlines等常用方法。注意read等方法返回的对象需要解码,一般为UTF-8面向对象。urllib.request中主要有3个对象:RequestOpenerHandlerRequest是url的抽象,可以加入一些data和header的规范。定义为urllib.request.Request(url,data=None,headers={})。参数headers是对应的http报文的头部部分。Opener是一个用来访问url的类。上面的urlopen函数基于模块内置的Opener。模块中只有一个Opener类urllib.request.OpenerDirector,该类的具体定义如下:|此处定义的方法:||__init__(自我)|初始化自己。||添加处理程序(自身,处理程序)||关闭(自我)||错误(自我,原型,*参数)||open(self,fullurl,data=None,timeout=)Handler用于处理访问中的一些“脏”工作,比如代理、cookies、身份认证等,很多Handler类定义在模块,BaseHandler为基类,HTTPRedirectHandler处理重定向,爬虫中常用ProxyHandler,定义为urllib.request.ProxyHandler(proxies=None),proxies参数为字典dict,形式为{"protocoltype":"Proxyip:portnumber"}内部逻辑三种RequestOpenerHandler的关系可以用一句话概括:OpeneropenURLs(Request)viachainedHandlers。Opener和Handler是如何链接在一起的?上面的OpenerDirector可以通过add_handler方法实现,也可以通过urllib.request.build_opener(handler)返回的OpenerDirector类实例来实现。