Python 3.6 之 Handlers和Opener的学习
程序员文章站
2022-05-02 22:12:59
...
Handler:解决各种问题的处理器,针对不同的问题有不同的handler,而这些handlers的父类是一个名为'BaseHandler'的类,在urllib.request 模块里
OpenerDirector:另一个urllib.request中较重要的类。以下是对OpenerDirector的定义:
The OpenerDirector manages a collection of Handler objects that do all the actual work.
The OpenerDirector is a composite object that invokes the Handlers needed to open the requested URL.
可以看出OpenerDirector是管理各种handlers来干具体活的,并且调用了需要打卡请求链接的handlers。
我们之前用的urlopen()这个方法,实际上它就是 urllib 为我们提供的一个 Opener,而opener实际是OpenerDirector的一个实例。
个人对OpenerDirector和handlers的理解是:
OpenerDirector好比是一个‘人',而各种handlers好比是创造好要解决问题的工具
handler这个工具造好了,但不会自己去解决问题,那怎么办呢?
那么我们的OpenerDirector就出场了,但是OpenerDirector这个‘人'是个宽泛的抽象概念
那么我们就给他做一个实例(opener),比如:‘张三',张三是‘人'这个抽象概念的实例,那么由张三亲自使用我们的handlers去解决问题
'''
# 1.HTTPBasicAuthHandler 验证handler
from urllib.request import HTTPPasswordMgrWithDefaultRealm,HTTPBasicAuthHandler,build_opener
from urllib.error import URLError
username = 'username'
password ='password'
url = 'http://localhost:sooo/'
p = HTTPPasswordMgrWithDefaultRealm()
# 利用 add_password()添加进去用户名和密码
p.add_password(None,url,username,password)
# 实例化 HTTPBasicAuthHandler对象,其参数是HTTPPasswordMgrWithDefaultRealm 对象
auth_handler = HTTPBasicAuthHandler(p)
# 为auth_handler这个工具造一个使用者(opener)出来
opener = build_opener(auth_handler)
try:
# 这里可以想象为使用者(opener)拿着工具(auth_handler)来打开我们的层层布防的大门(url)
result = opener.open(url)
html = result. read().decode('utf 8')
print(html)
except URLError as e:
print(e.reason)
# 2.ProxyHandler 代理handler
# 在真实IP访问服务器间设置代理服务器,伪装IP而不会被因为访问频率过高而遭封杀
from urllib.error
import URLError
from urllib.request import ProxyHandler, build_opener
proxy_handler = ProxyHandler({'http':'http://127.o.o.1:9743','https':'https://127.0.0.1:9743'})
opener = build_opener(proxy_handler)
try:
response = opener.open('https://www.baidu.com')
print(response.read().decode('utf-8'))
except URLError as e:
print(e.reason)
# 3.HTTPCookieProcessor Cookie handler
# Cookies 指某些网站为了辨别用户身份、 进行会话跟踪而存储在用户本地终端上的数据。
import http.cookiejar, urllib.request
cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener. open ('http://www.baidu.com')
for item in cookie:
print(item.name + " = " + item.value)
上一篇: webmagic爬取腾讯nba数据
下一篇: 爬取东方财富股吧中评论数据
推荐阅读
-
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
-
python人脸识别项目之基础学习(三):矩阵的基本运算 + 张量的阶和形态
-
Python正则表达式学习之match和search的实例
-
C语言学习之:(4)python 和 c 之间for循环的不同
-
Python七天学习之Day04——循环和函数的相关基础操作
-
python人脸识别项目之基础学习(三):矩阵的基本运算 + 张量的阶和形态
-
学习Python之路之self的用法、内置函数的用法以及私有属性和私有方法
-
Python 3.6 之 Handlers和Opener的学习
-
Python 3.6 之 Error类的主要功能学习
-
Python 3.6 之 urlopen方法的学习