标签:host rect orm 技术分享 子类 bytes 程序 没有响应 解决
python2中,有urllib和urllib2两个库,在python3中统一为urllib库
它是python内置的HTTP请求库,包含了4个模块:
官方文档:
https://docs.python.org/3/library/urllib.request.html
发送请求:
urllib.request模块:
1、urlopen()
urllib.request模块最基本的构造HTTP请求方法,可以模拟浏览器一个请求发起的过程,还带有处理授权验证、重定向、浏览器Cookies和其他内容
抓取python官网
查看返回的类型
是一个HTTPResponse类型,主要包含方法:
read()
readinto()
getheader(name)
getheaders()
fileno()
主要包含属性:
msg
version
status
reason
debuglevel
closed
urlopen()参数
urllib.request.urlopen(url , data=None , [timeout , ]* , cafile=None , capath=None , catefault=False , context=None)
timeout参数
用户设置超时时间,单位是秒,如果请求超过这个时间还没有响应,就抛出异常
超时的话会抛出超时
捕获异常
context:必须是ssl.SSLContext类型,用于指点SSL设置
cafile、capath:指定CA证书和它的路径
cadefault:默认是false,已经弃用
Request参数
发送请求依然使用urlopen()方法,只不过参数使用Request类型的对象
urllib.request.Request(url , data=None , headers={} , origin_req_host=None , unverifiable=flase , method=None)
url:请求的URL,必传
data:必须是bytes类型,如果是字典,先用rullib.parse模块里的 urlencode()编码
headers:请求头,字典形式,可以在参数直接构造,也可以通过调用add_header()方法添加
origin_req_host:请求方的host名或者IP地址
unverifiable:默认是flase,表示请求是否是无法验证的,也就是用户有没有权限来接收这个请求的结果
method:字符串形式,指定请求的方式
高级用法Handler
urllib.request中的BaseHandler类,是其他所有Handler的父类,提供了最基本的方法,defult_open()、protocol_request()等
各种继承这个BaseHandler父类的Handler子类:
OpenerDirector类
利用Handler来构建Opener
实例:
1、验证
例如打开网站时弹框提示登录,登录后才可以查看页面
2、代理
爬虫免不了做代理,添加代理
使用ProxyHandler,参数是一个字典,键名是协议类型,如:HTTP或者HTTPS,值是代理链接,可以添加多个代理
然后利用这个Handler及build_opener()方法构造一个Opener,之后发送请求
3、Cookies
将网站的Cookies获取下来,打印
首先声明一个CookieJar对象,然后利用HTTPCookieProcessor来构建一个Handler,最后利用build_opener()方法构建出Opener,执行open()方法
输出成文件格式
CookieJar换成MozillaCookieJar,生成文件时用,是CookieJar的子类,用来处理Cookie和文件相关的事,比如读取、保存,可以将Cookie保存成Mozilla型浏览器的Cookie形式
LWPCookieJar同样可以读取和保存Cookie,但是保存的格式和MozillaCookieJar不一样,它会保存成libwww-perl(LWP)格式的Cookie文件
读取并使用Cookie
lod()方法用来读取本地Cookie文件,获取内容,然后构建Handler和Opener完成操作
官方文档:
https://docs.python.org/3/library/urllib.request.html#basehandler-objects
标签:host rect orm 技术分享 子类 bytes 程序 没有响应 解决
原文地址:https://www.cnblogs.com/Mr-chenshuai/p/9127409.html