iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python Urllib2使用
  • 835
分享到

Python Urllib2使用

Python 2023-01-31 01:01:03 835人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

python Urllib2使用我们先看下Python对于Urllib2的解释:Intro代码  urllib2:An extensible library for opening URLs using a variety of proto

python Urllib2使用


我们先看下Python对于Urllib2的解释:

Intro代码  收藏代码
  1. urllib2:An extensible library for opening URLs using a variety of protocols  

  2. The urllib2(Http://docs.python.org/2/library/urllib2.html) module defines functions and classes which help in opening URLs (mostly HTTP) in a complex world — basic and digest authentication, redirections, cookies and more.  


简单的说,urllib2就是简单版本的HttpClient,能够处理HTTP请求,我们先看下urllib2提供的功能:

Python代码  收藏代码
  1. urllib2.urlopen(url[, data][, timeout])  

请求url,获得请求数据,url参数可以是个String,也可以是个Request参数

要熟悉Python的这种参数表达方式,[]表示可选项,这种表示方法简单清楚,描述方式相当不错。

没有data参数时为GET请求,设置data参数时为POST请求,另外data格式必须为application/x-www-fORM-urlencoded,urllib.urlencode()能够设置请求参数的编码

timeout设置请求阻塞的超时时间,如果没有设置的话,会使用全局默认timeout参数;该参数只对HTTP、https、FTP生效


Python代码  收藏代码
  1. class OpenerDirector  

管理一系列的Handler,这些handler都有自己的功能实现和协议,后面会提到大量的Handler功能



Python代码  收藏代码
  1. urllib2.build_opener([handler, ...])  

返回OpenerDirector实例,实现了BaseHandler都可以生成Handler实例。Python已经内建许多的Handler,你可以替换或者添加新的Handler。


内建Handler如下:

Python代码  收藏代码
  1. ProxyHandler:处理代理操作  

  2. UnknownHandler:Raise URLError异常  

  3. HTTPHandler:处理HTTP的GET和POST操作  

  4. HTTPDefaultErrorHandler:处理HTTP Error的通用处理,所有的响应都会抛出HTTPError异常  

  5. HTTPRedirectHandler:处理HTTP重定向操作,如301、302、303等和HEAD请求的307都会执行重定向操作  

  6. FTPHandler:处理FTP操作  

  7. FileHandler:处理文件  

  8. HTTPErrorProcessor:处理非200异常  


除去上面这些Handler,urllib2还有一些其它的Handler可供选择,这些Handler都能根据名称知晓其功能,不细作解释,包括但不仅限于:

Python代码  收藏代码
  1. HTTPCookieProcessor:处理cookie  

  2. HTTPBasicAuthHandler:处理Auth  

  3. ProxyBasicAuthHandler:处理Proxy和Auth  

  4. HTTPDigestAuthHandler:处理DigestAuth  

  5. ProxyDigestAuthHandler:处理ProxyDigest  

  6. HTTPSHandler:处理HTTPS请求  

  7. CacheFTPHandler:比FTPHandler多点功能。  


看下urllib2对于opener的使用:

Python代码  收藏代码
  1. urllib2.install_opener(opener)  

定义全局的OpenerDirector,如果执行这个方法,会把自己定义的Handler用在后续的URL处理上。



Urllib2的异常定义:

Python代码  收藏代码
  1. urllib2.URLError:  

  2. urllib2.HTTPError:  

这两个异常都是IOError的子类,对于Python的异常定义,大家都不是很满意,在urllib2中也不例外。


在上面提到urlopen的参数Request,这个Request类能更加丰富请求的内容:

Python代码  收藏代码
  1. class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])  

url和data的内容和前面的一致,添加了headers的信息,header的内容可以参考http://isilic.iteye.com/blog/1801072

origin_req_host应该是请求的服务器Host地址,unverifiable参数表明请求是否可验证


urllib2的主要类和方法就这么多了,看起来还是很好入手的,下面我们来直接使用下urllib2,例程包括但不限于官网:

Python代码  收藏代码
  1. import urllib2  

  2. f = urllib2.urlopen('http://www.python.org/')  

  3. print f.read(100)  

这个用法最简单,直接使用即可,对于大部分的url请求都可以使用这个方法。



Python代码  收藏代码
  1. import urllib2  

  2. req = urllib2.Request(url='https://localhost/cgi-bin/test.cgi',data='Committed Data')  

  3. f = urllib2.urlopen(req)  

  4. print f.read()  

使用Request参数来发送请求。



使用Request来进行更复杂的操作:

Python代码  收藏代码
  1. import urllib  

  2. import urllib2  

  3. url = 'http://www.server.com/cgi-bin/reGISter.cgi'

  4. user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; windows NT)'

  5. values = {'name' : 'Michael','language' : 'Python' }  

  6. headers = { 'User-Agent' : user_agent }  

  7. data = urllib.urlencode(values)  

  8. req = urllib2.Request(url, data, headers)  

  9. f = urllib2.urlopen(req)  

  10. print f.read()  

我们使用Request对象,设定了user_agent,对于某些Header需要注意,Server或者应用会对这些值做检查。

在使用 REST 接口时,Server 会检查Content-Type字段,用来确定 HTTP Body 中的内容该怎样解析。

常见的取值有:

Python代码  收藏代码
  1. application/xml :在 XML rpc,如 RESTful/SOAP 调用时使用  

  2. application/JSON :在 jsON RPC 调用时使用  

  3. application/x-www-form-urlencoded :浏览器提交 WEB 表单时使用  



Handler中有处理Redirect的handler,如果想确认是否跳转,确认下response的url是否和请求url一致即可。


Python代码  收藏代码
  1. import urllib2  

  2. request_url = "http://www.Google.copm"

  3. response = urllib2.urlopen(request_url)  

  4. redirected = response.geturl() == request_url  

如果不想自动Redirect,或者想在Redirect过程中添加些自己的动作,可以通过下面两种途径完成:

1:使用更低层次的httplib

2:使用自定义的HTTPRedirectHandler



Proxy的使用相当广泛,对于单个应用来说,爬虫是很容易被封禁,如果使用Proxy模式,就能降低被封的风险,所以有需求的同学需要仔细看下Python urllib2对于Proxy的使用:


Python代码  收藏代码
  1. import urllib2  

  2. proxy_handler = urllib2.ProxyHandler({'http': '127.0.0.1:80'})  

  3. opener = urllib2.build_opener(proxy_handler)  

  4. urllib2.install_opener(opener)  

  5. f = urllib2.urlopen('http://www.google.com')  

  6. print f.read()  

注意这个Proxy会将proxy_handler作为全局的ProxyHandler,这个未必是我们需要的,如果我们需要使用不同的Proxy,这个设置就有问题,需要修改为以下Proxy使用方式:


Python代码  收藏代码
  1. import urllib2  

  2. proxy_handler = urllib2.ProxyHandler({'http': '127.0.0.1:80'})  

  3. opener = urllib2.build_opener(proxy_handler)  

  4. f = opener.open(url)  

  5. print f.read()  


对于cookie的处理也是有Handler自动处理的:


Python代码  收藏代码
  1. import urllib2  

  2. import cookielib  

  3. cookies = cookielib.Cookiejar()  

  4. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))  

  5. response = opener.open('http://www.google.com')  

  6. for cookie in cookies:  

  7. if cookie.name == 'cookie_spec':  

  8. print cookie.value  

处理cookie是一般是cookielib和HTTPCookieProcessor一起使用


使用Basic HTTP Authentication

Python代码  收藏代码
  1. import urllib2  

  2. auth_handler = urllib2.HTTPBasicAuthHandler()  

  3. auth_handler.add_password(realm='PDQ Application',  

  4.                          uri='https://mahler:8092/site-updates.py',  

  5.                          user='klem',  

  6.                          passwd='kadidd!ehopper')  

  7. opener = urllib2.build_opener(auth_handler)  

  8. urllib2.install_opener(opener)  

  9. f = urllib2.urlopen('http://www.server.com/login.html')  

  10. print f.read()  


debug log level使用

Python代码  收藏代码
  1. import urllib2  

  2. httpHandler = urllib2.HTTPHandler(debuglevel=1)  

  3. httpsHandler = urllib2.HTTPSHandler(debuglevel=1)  

  4. opener = urllib2.build_opener(httpHandler, httpsHandler)  

  5. urllib2.install_opener(opener)  

  6. response = urllib2.urlopen('http://www.google.com')  

可以看到urllib2抓包时打印的内容,方便调试分析。


最后还有一点,使用urllib2.urlopen()时,urllib2有实际发送请求和获取响应吗?那么read()函数又进行了哪些操作呢?http://stackoverflow.com/questions/3009144/does-urllib2-urlopen-actually-fetch-the-page/3009697#3009697 。这篇文章能够很好的解决你心中的疑惑,大家仔细阅读下。


urllib2的使用就暂时到这里,其实urllib2已经给我们提供了基础的内容使用,对于扩展功能,也有很好的框架可以扩展;对于我们来说已经能够很好的进行工作啦。如果说这些功能还不能满足要求或者扩展也不能实现时,你只能使用httplib,或者自己实现并贡献python代码,相信对于技术提升还是很明显的。

最后还有一点,Python官方也提供了urllib2的源码,大家如果有什么不明白的地方,源码的准确性总是第一位的,源码的地址见这里:http://hg.python.org/cpython/file/2.7/Lib/urllib2.py。  没事翻翻Python的源码,对于Python本身的知识积累也是不错的。


【转载】:转载自http://isilic.iteye.com/blog/1806403

--结束END--

本文标题: Python Urllib2使用

本文链接: https://www.lsjlt.com/news/183588.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python Urllib2使用
    Python Urllib2使用我们先看下Python对于Urllib2的解释:Intro代码  urllib2:An extensible library for opening URLs using a variety of proto...
    99+
    2023-01-31
    Python
  • python中urllib2库使用
    1、Request函数   1)用法:urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])   2)作用:用于构造Request对象,可以传递d...
    99+
    2023-01-31
    python
  • python使用urllib2通过htt
    # -*- coding: utf-8 -*- import urllib2 # http发送报文 def httpsend(url, bw): req = urllib2.Request(url, bw) res_d...
    99+
    2023-01-31
    python htt
  • python urllib2
        最近学校快要选课了,所以想用python写一个抢课的脚本        思路是不断地post 请求数据        一开始先post一次数据进行试验    可是发现中途遇到一个问题,输入验证码登陆到主页之后,这里还是正常的    ...
    99+
    2023-01-31
    python
  • python的urllib2包基本使用方
    【另附】:python笔记系列1. urllib2.urlopen(request)url = "http://www.baidu.com" #url还可以是其他协议的路径,比如ftp values = {'name' : 'Michae...
    99+
    2023-01-31
    python
  • Python 中的 urllib2 模块
    通过python 的 urllib2 模块,可以轻易的去模拟用户访问网页的行为。这里将自己的学习过程简单的记录下来。一、urlopen函数    urlopen(url, data=None) -- Basic usage is the s...
    99+
    2023-01-31
    模块 Python
  • Python urllib2 发送HTT
    urllib2 是Python自带的标准模块, 用来发送HTTP Request的。  类似于 .NET中的,  HttpWebRequest类 Python urllib2 发出的HTTP Request, 能自动被Fiddler截获, ...
    99+
    2023-01-31
    Python HTT
  • 即使设置了超时,Python urllib2.urlopen 也会无限地冻结脚本
    这可能是由于网络连接问题导致的。当使用urllib2.urlopen函数时,它会尝试与远程服务器建立连接,并等待服务器响应。如果在超...
    99+
    2023-09-26
    Python
  • 怎样用原生的urllib2+httplib请求Https
    本篇文章给大家分享的是有关怎样用原生的urllib2+httplib请求Https,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。环境python2.7.5# https ser...
    99+
    2023-06-04
  • 【Python】Python使用redis
    转自:http://www.diybl.com/course/3_program/python/20110510/555370.html #1、安装  好吧,我承认我只会最简单的安装&n...
    99+
    2024-04-02
  • Python 使用python-kafk
    使用python-kafka类库开发kafka生产者&消费者&客户端   By: 授客 QQ:1033553122       1.测试环境 python 3.4   zookeeper-3.4.13.tar.gz 下载地...
    99+
    2023-01-30
    Python python kafk
  • Python使用cookie
    为什么要使用Cookie呢?Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用U...
    99+
    2023-01-31
    Python cookie
  • python使用setsockopt
    默认的socket选项不够用的时候,就必须要使用setsockopt来调整。就是使用setsockopt。 首先看一下socket的setsockopt 函数的定义: socket.setsockopt(level,optname, ...
    99+
    2023-01-31
    python setsockopt
  • python paramiko 使用
       python 下的paramiko功能很之强大。我们所熟悉的Ansible就是用paramiko编写。paramiko主要是通过ssh协议对远程主机的管理。比如:执行远程主机的CLI、上传和下载文件等。1.通过使用paramiko 远...
    99+
    2023-01-31
    python paramiko
  • Python 使用 matplotlib
    3D图形在数据分析、数据建模、图形和图像处理等领域中都有着广泛的应用,下面将给大家介绍一下如何在Python中使用 matplotlib进行3D图形的绘制,包括3D散点、3D表面、3D轮廓、3D直线(曲线)以及3D文字等的绘制。 准备工作...
    99+
    2023-01-31
    Python matplotlib
  • python使用pymsql
    pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。1、执行SQL#!/usr/bin/env python# -*- coding:utf-8 -*-import pymysql# 创建连接conn = ...
    99+
    2023-01-31
    python pymsql
  • python 使用sqlite3
    Sqlite是一个轻量级的数据库,类似于Access.一、 安装Python 2.5开始提供了对sqlite的支持,带有sqlite3库.没有sqli...
    99+
    2023-01-31
    python
  • python paramiko使用
     http://www.lag.net/paramiko/ Working with paramiko SSHClient is the main class provided by the paramkio mod...
    99+
    2023-01-31
    python paramiko
  • python PIL.Image使用
    一、 基本概念 通道每张图片由一个或多个通道构成RGB图像为例,每张图片由3个通道构成,即R通道,G通道,B通道。对于灰度图像,则只有一个通道。获取图像的通道数量和名称,可以由方法PIL.Image.getbands()获取,此方法返...
    99+
    2023-01-31
    python PIL Image
  • Python——使用ElementTre
    XML内容如下:<xml version="1.0" encoding="utf-8" standalone="no"> <manifest xmlns:android="http://schemas.android.co...
    99+
    2023-01-31
    Python ElementTre
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作