python爬虫学习第二天

来源:互联网 发布:棋盘覆盖算法 编辑:程序博客网 时间:2024/06/01 10:37

今天有点忙,待会儿还要出去一趟,只敲了一点,明天一定要把这节看完。

urllib.request高级特性

大家有没有发现,在上面的过程中,我们虽然可以构造Request,但是一些更高级的操作,比如Cookies处理,代理设置等操作我们该怎么办?
接下来就需要更强大的工具Handler登场了。
简而言之你可以把它理解为各种处理器,有专门处理登录验证的,有处理Cookies的,有处理代理设置的,利用它们我们几乎可以做到任何HTTP请求中所有的事情。

使用Handler构建更加高级的爬虫

首先介绍下urllib.request.BaseHandler,它是所有其他Handler的父类,它提供了最基本的Handler的方法,例如default_open()、protocol_request()等。
接下来就有各种Handler子类继承这个BaseHandler,举例几个如下:
HTTPDefaultErrorHandler用于处理HTTP响应错误,错误都会抛出HTTPError类型的异常。
HTTPRedirectHandler用于处理重定向。
HTTPCookieProcessor用于处理Cookie。
ProxyHandler用于设置代理,默认代理为空。
HTTPPasswordMgr用于管理密码,它维护了用户名密码的表。
HTTPBasicAuthHandler用于管理认证,如果一个链接打开时需要认证,那么可以用它来解决认证问题。

今天的练习:

练习5 使用Request函数作为urlopen()的参数,Request()可以帮助携带更多信息

# import urllib.request# import urllib.parse# import urllib.error# import socket# request = urllib.request.Request('https://python.org')# response = urllib.request.urlopen(request)# print(response.read().decode('utf-8'))

练习6 给Request加一些参数

# from urllib import request,parse# url1 = 'http://httpbin.org/post'# headers = {#   'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',#     'Host': 'httpbin.org'# }# dict = {#    'name': 'Germey'# }# data = bytes(parse.urlencode(dict),encoding = 'utf-8')# request1 = request.Request(url=url1,data=data,headers=headers,method='POST')# response = request.urlopen(request1)# print(response.read().decode('utf-8'))

练习7 opener类 以及handler的基础使用

from urllib.request import HTTPPasswordMgrWithDefaultRealm,HTTPBasicAuthHandler,build_openerfrom urllib.error import URLError# username = 'username'# password = 'password'# url = 'http://localhost:5000/'# p = HTTPPasswordMgrWithDefaultRealm()# p.add_password(None,url,username,password)# auth_handler = HTTPBasicAuthHandler(p)# opener = build_opener(auth_handler)# try:#   result = opener.open(url)#   html = result.read().decode('utf-8')#   print(html)#   pass# except Exception as e:#   print(e.reason)

handler这里还不是很明白,明天再看,先把代码模仿着敲了

原创粉丝点击