python 爬虫之为什么使用opener对象以及为什么要创建全局默认的opener对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 爬虫之为什么使用opener对象以及为什么要创建全局默认的opener对象相关的知识,希望对你有一定的参考价值。
基本的urlopen()函数不支持验证、cookie或其他HTTP高级功能。要支持这些功能,必须使用build_opener()函数来创建自己的自定义Opener对象。
install_opener(opener) 安装opener作为urlopen()使用的全局URL opener,即意味着以后调用urlopen()时都会使用安装的opener对象。opener通常是build_opener()创建的opener对象。不需要每次调用都要重新创建了,每次使用URLopen都是高级的、多功能的URLopen。
一些复杂情况详细解决办法:
1. cookie处理
如果要管理HTTP cookie,需要创建添加了HTTPCookieProcessor处理程序的opener对象。默认情况下。HTTPCookieProcessor使用CookieJar对象,将不同类型的CookieJar对象作为HTTPCookieProcessor的参数提供,可支持不同的cookie处理。
2. 代理
urllib2会自动检测代理设置,默认使用环境变量http_proxy 来设置 HTTP Proxy通常情况下,这是很有帮助的,因为也可能造成麻烦(因为通过代理获取本地URL资源时会被阻止,因此如果你正在通过代理访问Internet,那么使用脚本测试本地服务器时必须阻止urllib2模块使用代理)。因此,如果想在程序中明确Proxy的使用而不受环境变量的影响,可以通过创建ProxyHandler实例,并将实例作为build_opener()的参数来实现。
基本的urlopen()函数不支持验证、cookie或其他HTTP高级功能。要支持这些功能,必须使用build_opener()函数来创建自己的自定义Opener对象。
install_opener(opener) 安装opener作为urlopen()使用的全局URL opener,即意味着以后调用urlopen()时都会使用安装的opener对象。opener通常是build_opener()创建的opener对象。
一些复杂情况详细解决办法:
1. cookie处理
如果要管理HTTP cookie,需要创建添加了HTTPCookieProcessor处理程序的opener对象。默认情况下。HTTPCookieProcessor使用CookieJar对象,将不同类型的CookieJar对象作为HTTPCookieProcessor的参数提供,可支持不同的cookie处理。如下面代码:
1 |
mcj = cookielib.MozillaCookieJar( "cookies.txt" ) |
2 |
cookiehand = HTTPCookieProcessor(mcj) |
3 |
opener = urllib2.build_opener(cookiehand) |
4 |
u = opener. open (http: / / www.baidu.com) |
2. 代理
urllib2会自动检测代理设置,默认使用环境变量http_proxy 来设置 HTTP Proxy通常情况下,这是很有帮助的,因为也可能造成麻烦(因为通过代理获取本地URL资源时会被阻止,因此如果你正在通过代理访问Internet,那么使用脚本测试本地服务器时必须阻止urllib2模块使用代理)。因此,如果想在程序中明确Proxy的使用而不受环境变量的影响,可以通过创建ProxyHandler实例,并将实例作为build_opener()的参数来实现。如下面代码:
05 |
null_proxy_handler = urllib2.ProxyHandler({}) |
08 |
opener = urllib2.build_opener(proxy_handler) |
10 |
opener = urllib2.build_opener(null_proxy_handler) |
12 |
urllib2.install_opener(opener) |
3. 一个简单的模拟登录例子:
02 |
cj = cookielib.CookieJar() |
04 |
post_data = urllib.urlencode({ ‘username‘ : ‘[nowamagic]‘ , ‘password‘ : ‘[mypass]‘ , ‘pwd‘ : ‘1‘ }) |
08 |
cookieHandle = urllib2.HTTPCookieProcessor(cj) |
09 |
opener = urllib2.build_opener(cookieHandle) |
13 |
opener.addheaders = [( ‘User-agent‘ , ‘Opera/9.23‘ )] |
14 |
urllib2.install_opener(opener) |
15 |
req = urllib2.Request(path, post_data) |
16 |
conn = urllib2.urlopen(req) |
17 |
result = conn.geturl() |
25 |
self .render( "nowamagic.html" ,message = result) |
以上是关于python 爬虫之为什么使用opener对象以及为什么要创建全局默认的opener对象的主要内容,如果未能解决你的问题,请参考以下文章
python爬虫----handler和opener
python爬虫:Python2.7 Opener和Handler的使用和实例
爬虫之Handler处理器 和 自定义Opener
爬虫之Handler处理器和自定义Opener
Python之爬虫框架概述
python爬虫之Beautiful Soup库,基本使用以及提取页面信息