首页 后端开发 Python教程 [Python]网络爬虫(四):Opener与Handler的介绍和实例应用

[Python]网络爬虫(四):Opener与Handler的介绍和实例应用

Jan 21, 2017 pm 01:50 PM

在开始后面的内容之前,先来解释一下urllib2中的两个个方法:info and geturl 

urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info()和geturl()

1.geturl():

这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象使用的)或许会有重定向。获取的URL或许跟请求URL不同。

以人人中的一个超级链接为例,


我们建一个urllib2_test10.py来比较一下原始URL和重定向的链接:

from urllib2 import Request, urlopen, URLError, HTTPError  
  
  
old_url = 'http://rrurl.cn/b1UZuP'  
req = Request(old_url)  
response = urlopen(req)    
print 'Old url :' + old_url  
print 'Real url :' + response.geturl()
登录后复制

运行之后可以看到真正的链接指向的网址:

596.png

2.info():

这个返回对象的字典对象,该字典描述了获取的页面情况。通常是服务器发送的特定头headers。目前是httplib.HTTPMessage 实例。

经典的headers包含"Content-length","Content-type",和其他内容。


我们建一个urllib2_test11.py来测试一下info的应用:

from urllib2 import Request, urlopen, URLError, HTTPError  
  
old_url = 'http://www.baidu.com'  
req = Request(old_url)  
response = urlopen(req)    
print 'Info():'  
print response.info()
登录后复制

运行的结果如下,可以看到页面的相关信息:

597.png

下面来说一说urllib2中的两个重要概念:Openers和Handlers。

1.Openers:

当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。

正常情况下,我们使用默认opener:通过urlopen。

但你能够创建个性的openers。

2.Handles:

Openers使用处理器handlers,所有的“繁重”工作由handlers处理。

每个handlers知道如何通过特定协议打开URLs,或者如何处理URL打开时的各个方面。

例如HTTP重定向或者HTTP cookies。


如果你希望用特定处理器获取URLs你会想创建一个openers,例如获取一个能处理cookie的opener,或者获取一个不重定向的opener。


要创建一个 opener,可以实例化一个OpenerDirector,

然后调用.add_handler(some_handler_instance)。

同样,可以使用build_opener,这是一个更加方便的函数,用来创建opener对象,他只需要一次函数调用。
build_opener默认添加几个处理器,但提供快捷的方法来添加或更新默认处理器。

其他的处理器handlers你或许会希望处理代理,验证,和其他常用但有点特殊的情况。


install_opener 用来创建(全局)默认opener。这个表示调用urlopen将使用你安装的opener。

Opener对象有一个open方法。

该方法可以像urlopen函数那样直接用来获取urls:通常不必调用install_opener,除了为了方便。


说完了上面两个内容,下面我们来看一下基本认证的内容,这里会用到上面提及的Opener和Handler。

Basic Authentication 基本验证

为了展示创建和安装一个handler,我们将使用HTTPBasicAuthHandler。

当需要基础验证时,服务器发送一个header(401错误码) 请求验证。这个指定了scheme 和一个‘realm’,看起来像这样:Www-authenticate: SCHEME realm="REALM".

例如
Www-authenticate: Basic realm="cPanel Users"

客户端必须使用新的请求,并在请求头里包含正确的姓名和密码。

这是“基础验证”,为了简化这个过程,我们可以创建一个HTTPBasicAuthHandler的实例,并让opener使用这个handler就可以啦。


HTTPBasicAuthHandler使用一个密码管理的对象来处理URLs和realms来映射用户名和密码。

如果你知道realm(从服务器发送来的头里)是什么,你就能使用HTTPPasswordMgr。


通常人们不关心realm是什么。那样的话,就能用方便的HTTPPasswordMgrWithDefaultRealm。

这个将在你为URL指定一个默认的用户名和密码。

这将在你为特定realm提供一个其他组合时得到提供。

我们通过给realm参数指定None提供给add_password来指示这种情况。


最高层次的URL是第一个要求验证的URL。你传给.add_password()更深层次的URLs将同样合适。

说了这么多废话,下面来用一个例子演示一下上面说到的内容。


我们建一个urllib2_test12.py来测试一下info的应用:

# -*- coding: utf-8 -*-  
import urllib2  
  
# 创建一个密码管理者  
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()  
  
# 添加用户名和密码  
  
top_level_url = "http://example.com/foo/"  
  
# 如果知道 realm, 我们可以使用他代替 ``None``.  
# password_mgr.add_password(None, top_level_url, username, password)  
password_mgr.add_password(None, top_level_url,'why', '1223')  
  
# 创建了一个新的handler  
handler = urllib2.HTTPBasicAuthHandler(password_mgr)  
  
# 创建 "opener" (OpenerDirector 实例)  
opener = urllib2.build_opener(handler)  
  
a_url = 'http://www.baidu.com/'  
  
# 使用 opener 获取一个URL  
opener.open(a_url)  
  
# 安装 opener.  
# 现在所有调用 urllib2.urlopen 将用我们的 opener.  
urllib2.install_opener(opener)
登录后复制

注意:以上的例子我们仅仅提供我们的HHTPBasicAuthHandler给build_opener。

默认的openers有正常状况的handlers:ProxyHandler,UnknownHandler,HTTPHandler,HTTPDefaultErrorHandler, HTTPRedirectHandler,FTPHandler, FileHandler, HTTPErrorProcessor。

代码中的top_level_url 实际上可以是完整URL(包含"http:",以及主机名及可选的端口号)。


例如:http://example.com/。

也可以是一个“authority”(即主机名和可选的包含端口号)。

例如:“example.com” or “example.com:8080”。

后者包含了端口号。

以上就是 [Python]网络爬虫(四):Opener与Handler的介绍和实例应用的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何利用React和Python构建强大的网络爬虫应用 如何利用React和Python构建强大的网络爬虫应用 Sep 26, 2023 pm 01:04 PM

如何利用React和Python构建强大的网络爬虫应用引言:网络爬虫是一种自动化程序,用于通过互联网抓取网页数据。随着互联网的不断发展和数据的爆炸式增长,网络爬虫越来越受欢迎。本文将介绍如何利用React和Python这两种流行的技术,构建一个强大的网络爬虫应用。我们将探讨React作为前端框架,Python作为爬虫引擎的优势,并提供具体的代码示例。一、为

使用Vue.js和Perl语言开发高效的网络爬虫和数据抓取工具 使用Vue.js和Perl语言开发高效的网络爬虫和数据抓取工具 Jul 31, 2023 pm 06:43 PM

使用Vue.js和Perl语言开发高效的网络爬虫和数据抓取工具近年来,随着互联网的迅猛发展和数据的日益重要,网络爬虫和数据抓取工具的需求也越来越大。在这个背景下,结合Vue.js和Perl语言开发高效的网络爬虫和数据抓取工具是一种不错的选择。本文将介绍如何使用Vue.js和Perl语言开发这样一个工具,并附上相应的代码示例。一、Vue.js和Perl语言的介

网络爬虫是什么 网络爬虫是什么 Jun 20, 2023 pm 04:36 PM

网络爬虫(也称为网络蜘蛛)是一种在互联网上搜索和索引内容的机器人。从本质上讲,网络爬虫负责理解网页上的内容,以便在进行查询时检索它。

如何使用PHP编写一个简单的网络爬虫 如何使用PHP编写一个简单的网络爬虫 Jun 14, 2023 am 08:21 AM

网络爬虫是一种自动化程序,能够自动访问网站并抓取其中的信息。这种技术在如今的互联网世界中越来越常见,被广泛应用于数据挖掘、搜索引擎、社交媒体分析等领域。如果你想了解如何使用PHP编写简单的网络爬虫,本文将会为你提供基本的指导和建议。首先,需要了解一些基本的概念和技术。爬取目标在编写爬虫之前,需要选择爬取的目标。这可以是一个特定的网站、一个特定的网页、或整个互

PHP 网络爬虫之 HTTP 请求方法详解 PHP 网络爬虫之 HTTP 请求方法详解 Jun 17, 2023 am 11:53 AM

随着互联网的发展,各种各样的数据变得越来越容易获取。而网络爬虫作为一种获取数据的工具,越来越受到人们的关注和重视。在网络爬虫中,HTTP请求是一个重要的环节,本文将详细介绍PHP网络爬虫中常见的HTTP请求方法。一、HTTP请求方法HTTP请求方法是指客户端向服务器发送请求时,所使用的请求方法。常见的HTTP请求方法有GET、POST、PU

如何使用PHP和swoole进行大规模的网络爬虫开发? 如何使用PHP和swoole进行大规模的网络爬虫开发? Jul 21, 2023 am 09:09 AM

如何使用PHP和swoole进行大规模的网络爬虫开发?引言:随着互联网的迅速发展,大数据已经成为当今社会的重要资源之一。为了获取这些宝贵的数据,网络爬虫应运而生。网络爬虫可以自动化地访问互联网上的各种网站,并从中提取所需的信息。在本文中,我们将探讨如何使用PHP和swoole扩展来开发高效的、大规模的网络爬虫。一、了解网络爬虫的基本原理网络爬虫的基本原理很简

PHP 简单网络爬虫开发实例 PHP 简单网络爬虫开发实例 Jun 13, 2023 pm 06:54 PM

随着互联网的迅速发展,数据已成为了当今信息时代最为重要的资源之一。而网络爬虫作为一种自动化获取和处理网络数据的技术,正越来越受到人们的关注和应用。本文将介绍如何使用PHP开发一个简单的网络爬虫,并实现自动化获取网络数据的功能。一、网络爬虫概述网络爬虫是一种自动化获取和处理网络资源的技术,其主要工作过程是模拟浏览器行为,自动访问指定的URL地址并提取所

PHP学习笔记:网络爬虫与数据采集 PHP学习笔记:网络爬虫与数据采集 Oct 08, 2023 pm 12:04 PM

PHP学习笔记:网络爬虫与数据采集引言:网络爬虫是一种自动从互联网上抓取数据的工具,它可以模拟人的行为,浏览网页并收集所需的数据。PHP作为一种流行的服务器端脚本语言,在网络爬虫和数据采集领域也发挥了重要的作用。本文将介绍如何使用PHP编写网络爬虫,并提供实际的代码示例。一、网络爬虫的基本原理网络爬虫的基本原理是通过发送HTTP请求,接收并解析服务器响应的H

See all articles