网路爬虫--库的高级用法(4)

目录

1.BaseHandle类

2.OpenerDirector

3.例子

3.1登录请求

3.2代理

3.3Cookie

3.3.1将cookie存储在本地


对于一些高级的操作需要用到处理工具。如专门处理登录验证的,有处理饼干的,代理

1.BaseHandle类

他是所欲手柄类的父类,他的子类有:

HTTPDefaultErrorHandle:用于处理HTTP相应错误,会抛出httpError类型的异常

HTTPRedirectHandle:用于处理重定向

HTTPCookiePrecseeor;用于处理饼干

ProxyHandler:用于设置代理,默认为空

HTTPPasswordMgr:用于管理密码,维护了用户名和密码的表

HTTPasicAuthHandle:用于管理认证

https://docs.python.org/3/library/urllib.request.html#urllib.request.BaseHandler

2.OpenerDirector

OpenerDirector提供一个open()的方法,其功能和返回值类型与的urlopen()相同,是使用手柄来构建的open()的。能够实现更加高级的功能。

3.例子

3.1登录请求

#!usr/bin/env python
#-*- coding:utf-8 -*-
from urllib.request import HTTPPasswordMgrWithDefaultRealm,HTTPBasicAuthHandler,build_opener
from urllib.error import URLError

username='username'
password='password'
url='http://localhost:5000/'

p = HTTPPasswordMgrWithDefaultRealm()#实例化一个HTTPPasswordMgrWithDefaultRealm对象,用于密码的管理
p.add_password(None,url,username,password)#向密码管理中添加一个用户名和密码
auth_handle=HTTPBasicAuthHandler(p)#实例化一个登录验证处理的对象
opener = build_opener(auth_handle)#使用build_opener构建一个Opener对象

try:
    result = opener.open(url)#打开页面并请求验证
    html = result.read().decode('utf-8')#成功后获取页面
    print(html)#打印获取的内容
except URLError as e:
    print(e.reason)

3.2代理

from urllib.error import URLError
from urllib.request import ProxyHandler,build_opener

proxy_handle = ProxyHandler({  
    'http':'http://127.0.0.:9743',
    'http':'https://127.0.0.:9743'
})#添加代理的服务器
opener = build_opener(proxy_handle)#将代理的服务器
try:
    response=opener.open('http://www.baidu.com')#打开百度
    print(response.read().decode('utf-8'))#查看会返回的内容
except URLError as e:
    print(e.reason)#异常处理

3.3Cookie

import http.cookiejar,urllib.request

cookie = http.cookiejar.CookieJar()#获取cookie
handle = urllib.request.HTTPCookieProcessor(cookie)#将cookie绑定到handle对象中
opener = urllib.request.build_opener(handle)#穿件一个open对象
response = opener.open('http://www.baidu.com')#使用open对象打开百度网页
for item in cookie:
    print(item.name+'='+item.value)#遍历显示cookie的信息

3.3.1将cookie存储在本地

import http.cookiejar,urllib.request
filename='cookie.text'
cookie = http.cookiejar.MozillaCookieJar(filename)#获取cookie MozillaCookieJar是CookieJar的子类
handle = urllib.request.HTTPCookieProcessor(cookie)#将cookie绑定到handle对象中
opener = urllib.request.build_opener(handle)#穿件一个open对象
response = opener.open('http://www.baidu.com')#使用open对象打开百度网页
cookie.save(ignore_discard=True,ignore_expires=True)#存储

猜你喜欢

转载自blog.csdn.net/qq_34217491/article/details/81155432