您的位置:首页 > 编程语言 > Python开发

python爬虫学习第二天

2017-07-26 22:44 357 查看
今天有点忙,待会儿还要出去一趟,只敲了一点,明天一定要把这节看完。

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_opener

from 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这里还不是很明白,明天再看,先把代码模仿着敲了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python