与urllib的区别

Python的urllib和urllib2模块都做与请求URL相关的操作;

3.x的版本urllib与urllib2已经合并为一个urllib库;

2.7的版本urllib与urllib2各有各的作用,urllib与urllib2并不是可以代替的,2是1的补充;

以下适用于版本2.7。

概述

urllib2模块定义的函数和类可用来获取URL(主要是HTTP的),它提供一些复杂的接口用于处理基本认证、重定向、Cookies等。

urllib2 可以接受一个Request对象,并以此可设置一个URL的headers(urllib只接收一个URL,这意味着你不能伪装你的用户代理字符串等)。

urllib2支持许多的“URL schemes”,“URL schemes”由URL中“:”之前的字符串确定,如“ftp://python.org/”是“FTP”的URL方案之一;他还支持相关的网络协议(如FTP,HTTP)。

常用方法和类

urllib2.urlopen(url, data, timeout)

作用:

打开URL网址

参数解释:

url:可以是一个字符串URL或者是一个Request对象。Request对象和data在request类中说明,定义都是一样的;

data:可省略;

timeout:可省略,阻塞操作,以秒为单位,尝试连接,如果没有指定,将使用设置的全局默认timeout值。实际上这仅适用于HTTP,HTTPS和FTP连接;

举例:

import urllib2

response = urllib2.urlopen('http://python.org/') #调用urlopen函数对请求的url返回一个response对象,这个response类似于一个file对象

html = response.read() #用.read()函数可以操作这个response对象

import urllib2

req = urllib2.Request('http://python.org/') #通过URL实例化了Request类的对象

response = urllib2.urlopen(req)

the_page = response.read()

urllib2.Request(url, data, headers, origin_req_host, unverifiable)

作用:

Request类是一个抽象的URL请求

参数解释:

url:是一个字符串,其中包含一个有效的URL。

data:可省略,是一个字符串,指定额外的数据发送到服务器,如果没有data需要发送可以为“None”。目前使用data的HTTP请求是唯一的。当请求含有data参数时,HTTP的请求为POST,而不是GET。数据应该是缓存在一个标准的application/x-www-form-urlencoded格式中。urllib.urlencode()函数用映射或2元组,返回一个这种格式的字符串。

通俗的说就是,如果想向一个URL发送数据(通常这些数据是代表一些CGI脚本或者其他的web应用),对于HTTP来说这动作叫Post。例如在网上填form(表单)时,浏览器会POST表单的内容,这些数据需要被以标准的格式编码(encode),然后作为一个数据参数传送给Request对象。Encoding是在urlib模块中完成的,而不是在urlib2中完成的。下面是个例子:

import urllib

import urllib2

url = 'http://www.someserver.com/cgi-bin/register.cgi'

values = {'name' : 'Michael Foord',

'location' : 'Northampton',

'language' : 'Python' }

data = urllib.urlencode(values)

req = urllib2.Request(url, data)

response = urllib2.urlopen(req)

the_page = response.read()

headers:可省略,是字典类型。作为辨别浏览器身份的User-Agent,header是经常被用来恶搞和伪装的,因为一些HTTP服务只允许某些请求来自常见的浏览器而不是脚本,或是针对不同的浏览器返回不同的版本。例如,Mozilla Firefox浏览器被识别为“Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11”。默认情况下,urlib2把自己识别为Python-urllib/x.y(这里的xy是python发行版的主要或次要的版本号,如在Python 2.6中,urllib2的默认用户代理字符串是“Python-urllib/2.6)。

标准的headers组成是(Content-Length, Content-Type and Host),可以在生成Request对象之前初始化header,作为参数在request时直接传入:

import urllib

import urllib2

url = 'http://www.someserver.com/cgi-bin/register.cgi'

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'

values = {'name' : 'Michael Foord',

'location' : 'Northampton',

'language' : 'Python' }

headers = { 'User-Agent' : user_agent } #模仿IE浏览器提交请求

data = urllib.urlencode(values)

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

response = urllib2.urlopen(req)

the_page = response.read()

也可以把每个键和值作为参数,调用add_header(key, val)方法附加header:

import urllib2

req = urllib2.Request('http://www.example.com/')

req.add_header('Referer', 'http://www.python.org/')

r = urllib2.urlopen(req)

或者OpenerDirector.open()时加入:

import urllib2

opener = urllib2.build_opener() #urllib2.build_opener会返回一个OpenerDirector对象,OpenerDirector为每一个Request自动加上一个User-Agent header

opener.addheaders = [('User-agent', 'Mozilla/5.0')]

opener.open('http://www.example.com/')

origin_req_host:可省略,是RFC2965定义的源交互的request-host。默认的取值是cookielib.request_host(self)。这是由用户发起的原始请求的主机名或IP地址。例如,如果请求的是一个HTML文档中的图像,这应该是包含该图像的页面请求的request-host。

unverifiable:可省略,代表请求是否是无法验证的,它也是由RFC2965定义的。默认值为false。一个无法验证的请求是,其用户的URL没有足够的权限来被接受。例如,如果请求的是在HTML文档中的图像,但是用户没有自动抓取图像的权限,unverifiable的值就应该是true。

urllib2.build_opener([handler, ...])

作用:

创建opener对象的函数,实例化会得到OpenerDirector对象,默认会加入许多handlers,它提供了一个快速的方法添加更多东西和使默认的handler失效,从而生成自定义opener。

参数解释:

handlers:可以被BaseHandler或他的子类实例化,子类中可以通过以下实例化:ProxyHandler (如果检测代理设置用), UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor。

urllib2.install_opener(opener)

作用:

install_opener实例化会得到OpenerDirector 对象,用来赋予全局变量opener。

参数解释:

创建openers时如果想要安装特别的handlers来实现获取url的话,可以先实例一个OpenerDirector对象,然后多次调用.add_handler(some_handler_instance)来创建opener。

正常情况下程序一直通过urlopen使用默认的opener对象,使用install_opener后再调用urlopen,将会用到新创建的自定义的openers,这样可以让每一个handler知道以哪种协议打开url、如何处理打开url发生的HTTP重定向等。

举例:

import urllib2

req = urllib2.Request('http://www.python.org/')

opener=urllib2.build_opener()

urllib2.install_opener(opener) #设置 urllib2 的全局 opener

f = opener.open(req)

f = urllib2.urlopen(req)

python2 urllib模块_python urllib2模块相关推荐

  1. python批量下载网页文件夹_Python的urllib模块、urllib2模块批量进行网页下载文件...

    由于需要从某个网页上下载一些PDF文件,但是需要下载的PDF文件有几百个,所以不可能用人工点击来下载.正好Python有相关的模块,所以写了个程序来进行PDF文件的下载,顺便熟悉了Python的url ...

  2. python下载网页中的pdf文件_【Python】Python的urllib模块、urllib2模块批量进行网页下载文件...

    由于需要从某个网页上下载一些PDF文件,但是需要下载的PDF文件有几百个,所以不可能用人工点击来下载.正好Python有相关的模块,所以写了个程序来进行PDF文件的下载,顺便熟悉了Python的url ...

  3. 【Python】Python的urllib模、urllib2模块的网络下载文件

    因为需要从一些下载一个页PDF文件.但是需要下载PDF有数百个文件,这是不可能用人工点击下载.只是Python有相关模块,所以写一个程序PDF文件下载,顺便熟悉Python的urllib模块和ulrl ...

  4. python模块下载1002python模块下载_【Python】Python的urllib模、urllib2模块的网络下载文件...

    因为需要从一些下载一个页PDF文件.但是需要下载PDF有数百个文件,这是不可能用人工点击下载.只是Python有相关模块,所以写一个程序PDF文件下载,顺便熟悉Python的urllib模块和ulrl ...

  5. Python学习之urlib模块和urllib2模块学习

    2019独角兽企业重金招聘Python工程师标准>>> 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://john ...

  6. python的itchat模块_Python itchat模块在微信上的各种小应用

    前两天在51cto看见某篇推荐博文,大概是一个Python的小程序可以读取微信撤回的信息.豆子比较感兴趣,在知乎和github上搜索了相关的源代码,发现原来实现起来非常的简单,他的核心是使用一个叫做i ...

  7. python文件操作和模块_Python(五)--模块与文件操作

    Python(五)–模块与文件操作 模块和包 模块 模块是包含Python定义和语句的文件,把一组相关函数或代码组织到一个文件中,一个文件即一个模块.模块的文件名 = 模块名+后缀.py 模块之间代码 ...

  8. python3导入ping模块_Python ping 模块

    print socket.gethostbyname('www.baidu.com') fping功能 https://www.cnblogs.com/zhoujie/p/python17.html ...

  9. python argparse模块_Python argparse模块应用实例解析

    这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 argparse是python ...

最新文章

  1. linux下进程的tty,Linux下TTY驱动程序分析
  2. hadoop2.2.0安装,完全分布式安装
  3. 使用golang的http模块构建redis读写查api
  4. 【ERP】如何根据系统币种(扩展)精度来动态产生数字的格式(FORMAT MASK)
  5. SAP Spartacus cxFocus的config属性的赋值原理
  6. Java FileReader与FileWriter讲解
  7. Android 第三章 SQLite 数据库
  8. (39)FPGA面试技能提升篇(nandflash接口)
  9. setTimeout和setInteval
  10. CSDN下载频道积分规则2.1
  11. 关于DoIP 协议的理解
  12. 膜拜 丹尼斯·里奇(纪念 C 语言之父离世 6 周年) 我们欠他的不止是张电影票
  13. pytorch-cpn可视化标注信息
  14. [bx]和loop指令
  15. 机器学习——模型的评估方法速查手册(RMSE+RSE+MAE+RAE+R^2)
  16. javabean/Listjavabean与map/Listmap互相转换
  17. android 内存优化 性能优化
  18. uml建模外卖订餐系统
  19. 面向对象_猫狗案例加入跳高功能代码实现
  20. Python 3.7极速入门教程9最佳python中文书籍下载

热门文章

  1. 《爱在 ZStack Cube 超融合》三部曲
  2. ansible自动化运维详解(一)ansible的安装部署、参数使用、清单管理、配置文件参数及用户级ansible操作环境构建
  3. influxdb介绍
  4. Hinton AAAI2020 演讲——胶囊网络
  5. MongoDB安装,使用教程(图文)
  6. 抄底摸顶的高概率交易技巧
  7. 【Unity】【VR开发】为什么认为Quest和Unity组合是目前消费级VR开发的最佳组合
  8. java encrypt des_oracle中的encrypt_des加密对应Java的加密方式
  9. OpenCV入门(17):图片的浮雕效果
  10. 陪诊小程序开发|陪诊护理系统|陪护软件开发