在urllib2中,Openers和Handlers是两个非常重要的概念。它们能够相互配合,为我们提供更加灵活、定制化的爬虫功能。
Handlers
首先,我们来介绍Handlers。Handler是urllib2库中一个非常重要的概念,是用于处理HTTP请求的基础组件。通过添加不同类型的Handlers,我们可以对不同类型的请求进行处理,例如HTTP请求、HTTPS请求、FTP请求等等。
一个Handler是通过urllib2.build_opener()函数创建的,而build_opener()函数返回的就是一个OpenerDirector对象,它能够处理我们定义的handlers的集合。例如,如果我们要处理HTTP请求,可以创建一个HTTPHandler对象,并通过build_opener()函数创建一个OpenerDirector对象。代码示例如下:
import urllib2
# 创建一个HTTPHandler对象,并指定debuglevel为1
http_handler = urllib2.HTTPHandler(debuglevel=1)
# 创建一个OpenerDirector对象,并将http_handler添加到其中
opener = urllib2.build_opener(http_handler)
# 使用opener发送HTTP请求
response = opener.open('http://www.baidu.com')
# 打印服务器返回的数据
print response.read()
输出的信息中会显示HTTP请求的具体内容,类似下面这样:
send: 'GET / HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: www.baidu.com\r\nConnection: close\r\nUser-Agent: Python-urllib/2.7\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
我们也可以创建多个handler,并在一个OpenerDirector对象中添加多个handler,从而实现更加复杂的爬虫任务。
Openers
然后,我们来介绍Openers。Opener是一个高级别的处理器,它使用Handlers来完成对URL的请求。Opener可以根据需要产生多个Handler来处理请求。
使用Opener的好处在于,我们可以自定义错误处理、代理设置、header自定义等功能,而不用重复定义handlers。Opener将不同的handlers组合在一起,构成了我们需要用到的网络请求操作。
我们可以使用urllib2.build_opener()
函数来创建一个Opener对象,并使用该对象来发送请求。代码示例如下:
import urllib2
# 创建一个HTTPHandler对象
http_handler = urllib2.HTTPHandler(debuglevel=1)
# 创建一个HTTPCookieProcessor对象
cookie_handler = urllib2.HTTPCookieProcessor()
# 利用urllib2.build_opener()方法创建一个Opener对象
opener = urllib2.build_opener(http_handler, cookie_handler)
# 利用Opener对象发送GET请求
response = opener.open('http://www.baidu.com')
# 打印服务器返回的数据
print response.read()
在上述代码中,我们首先创建了一个HTTPHandler对象,用于处理HTTP请求;其次创建了一个HTTPCookieProcessor对象,用于处理cookie。最终通过urllib2.build_opener()
方法将这两个handler组合在一起,创建了一个Opener对象,并在Opener对象中完成了对URL内容的请求。
总结一下,Openers和Handlers是urllib2中重要的概念,用于实现网络请求处理。Openers封装了多个Handlers,实现了对HTTP请求、cookie处理等功能的封装;而Handlers可以单独使用,或者组合在一起使用,完成不同的请求操作。通过学习和理解这两个概念,我们可以更好地利用urllib2进行python爬虫开发。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers - Python技术站