Python中urllib与urllib2模块的变化与使用详解

 更新时间:2023年05月18日 10:18:59   作者:FLy_鹏程万里  
urllib是python提供的一个用于操作URL的模块,在python2.x中有URllib库,也有Urllib2库,在python3.x中Urllib2合并到了Urllib中,我们爬取网页的时候需要经常使用到这个库,需要的朋友可以参考下

什么是urllib

urllib是python提供的一个用于操作URL的模块,在python2.x中有URllib库,也有Urllib2库,在python3.x中Urllib2合并到了Urllib中,我们爬取网页的时候需要经常使用到这个库。

升级合并之后,模块中包的位置变化的地方比较多。在此,我们总结并为大家列举一些常见的位置变动,方便之前用python2.x的朋友在使用python3.x的时候可以快速的掌握,其他的在用到的时候再具体为大家讲解。

常见的变化有:

  • python2.x中使用import urllib2——————对应的,在python3.x中会使用import urllib.request,urllib.error。
  • 在python2.x中使用import urllib——————对应的,在python3.x中会使用import urlli.request,urllib.error
  • 在python2.x中使用import urlparse—————对应的,在python3.x中会使用import urllib.parse
  • 在python2.x中使用import urllib2——————对应的,在python3.x中会使用import urllib.request,urllib.error
  • 在python2.x中使用urllib2.urlopen——————对应的,在python3.x中会使用import urllib.request.urlopen
  • 在python2.x中使用urllib.quote——————对应的,在python3.x中会使用import urllib.request.quote
  • 在python2.x中使用cookielib.CoolieJar——————对应的,在python3.x中会使用Http.CookieJar
  • 在python2.x中使用urllib2.Request————对应的,在python3.x中会使用urllib.request.Request。

以上是对urllib相关模块中从python2.x到python3.x的常见的一些变动,如果之前使用的是python2.x版本或者在网上阅读关于python2.x的代码,可以根据以上对应关系写出python3.x程序

urllib与urllib2函数库使用说明

(1)def urlopen(url,data=None,proxies=None)

参数说明:

  • url:需要打开的网址(必须符合URL规范)
  • data:向指定的URL发送的数据字符串,Get或者POST都可以,但是必须符合标准格式,格式为:
    • key1=value1&key2=value2.................
  • proxies:代理服务器地址字典,如果未指定,在window平台上则根据IE的设置不支持需要验证的代理服务器。

返回值说明:urlopen返回一个类文件对象,该类文件有如下方法:

  • read(),readline(),readlines(),fileno(),close():这些方法的使用方式与文件对象完全一样;
  • info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的消息;
  • getcode():返回HTTP状态码。如果是HTTP请求,200表示请求成功完成,404表示资源不存在或未找到。

代码实例:

#encoding:utf-8
import urllib
baidu=urllib.urlopen('http://www.baidu.com')
print "http header:\n",baidu.info()
print 'http status:\n',baidu.getcode()
print 'url:\n',baidu.geturl()
for i in baidu:
    print(i)
baidu.close()

运行结果:

(2)def urlretrieve(url, filename=None, reporthook=None, data=None)

参数说明:

  • url:符合URL规范的字符串
  • filename:本地文件路径的字符串,从URL返回的数据将保存在该文件中,如果设置为None则生成一个临时文件。
  • reporthook:一个函数引用,当连接上服务器、以及相应的数据库传输完毕的时候会触发该函数,我们可以利用这个函数来显示当前的下载进度等等。

我们可以任意定义该函数的行为,只需要保证函数有三个参数:

  • 第一个参数:为目前为止传递的数据块数量
  • 第二个参数:为每个数据块的大小,单位为byte
  • 第三个参数:为文件总的大小(某些时候可能为-1)

data:向指定的URL发送的数据字符串,Get和Post都可以,但是必须符合标准格式:

key1=value1&key2=value2..........

函数返回值:返回一个元组(filename,headers),filename为参数总的filename,header为从服务器传回来的MIME的类型。

实例:

#encoding:utf-8
import urllib
def do(a,b,c):
    """回调函数
    @a: 已经下载的数据块
    @b: 数据块的大小
    @c: 远程文件的大小
    """
    per = 100.0 * a * b / c    
    if per > 100:    
        per = 100    
    print '%.2f%%' % per
url='http://www.baidu.com'
local="I:\python\StoreData\hello.html"
urllib.urlretrieve(url,local,do)

运行结果显示:

(3)其他函数

  • urllib.quote(string[, safe]):对字符串进行编码。参数safe指定了不需要编码的字符;
  • urllib.unquote(string) :对字符串进行解码;
  • urllib.quote_plus(string[,safe]) :与urllib.quote类似,但这个方法用'+'来替换' ',而quote用'%20'来代替' '
  • urllib.unquote_plus(string) :对字符串进行解码;
  • urllib.urlencode(query[, doseq]):将dict或者包含两个元素的元组列表转换成url参数。例如 字典{'name': 'dark-bull', 'age': 200}将被转换为"name=dark-bull&age=200"
  • urllib.pathname2url(path):将本地路径转换成url路径;
  • urllib.url2pathname(path):将url路径转换成本地路径;
import urllib
data = 'name = ~a+3'
data1 = urllib.quote(data)
print data1  # result: name%20%3D%20%7Ea%2B3
print urllib.unquote(data1)  # result: name = ~a+3
data2 = urllib.quote_plus(data)
print data2  # result: name+%3D+%7Ea%2B3
print urllib.unquote_plus(data2)  # result: name = ~a+3
data3 = urllib.urlencode({'name': 'dark-bull', 'age': 200})
print data3  # result: age=200&name=dark-bull
data4 = urllib.pathname2url(r'd:/a/b/c/23.php')
print data4  # result: ///D|/a/b/c/23.php
print urllib.url2pathname(data4)  # result: D:/a/b/c/23.php

运行结果:

urllib、urllib2代码实战测试

(1)简单读取网页信息

#coding:utf-8
import  urllib
response=urllib.urlopen('http://www.baidu.com')
print response.read()

运行结果:

到此这篇关于Python中urllib与urllib2模块的变化与使用详解的文章就介绍到这了,更多相关Python的urllib与urllib2模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)

    Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)

    今天小编就为大家分享一篇Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python pandas的describe函数参数示例详解

    Python pandas的describe函数参数示例详解

    describe()函数是pandas 中一个十分实用的工具,用于快速获取数据集的描述性统计信息,本文详细介绍了该函数的各种参数及其用法,包括控制输出的百分位数、列类型以及是否将日期时间列视为数值型列等,感兴趣的朋友一起看看吧
    2018-04-04
  • Keras官方中文文档:性能评估Metrices详解

    Keras官方中文文档:性能评估Metrices详解

    这篇文章主要介绍了Keras官方中文文档:性能评估Metrices详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 利用Anaconda简单安装scrapy框架的方法

    利用Anaconda简单安装scrapy框架的方法

    今天小编就为大家分享一篇利用Anaconda简单安装scrapy框架的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python中将两个或多个list合成一个list的方法小结

    Python中将两个或多个list合成一个list的方法小结

    python中,list这种数据结构很常用到,如果两个或者多个list结构相同,内容类型相同,我们通常会将两个或者多个list合并成一个,这样我们再循环遍历的时候就可以一次性处理掉了
    2019-05-05
  • Python 26进制计算实现方法

    Python 26进制计算实现方法

    这篇文章主要介绍了Python 26进制计算实现方法,涉及Python字符串与数值计算的相关操作技巧,需要的朋友可以参考下
    2015-05-05
  • python中使用.py配置文件的方法详解

    python中使用.py配置文件的方法详解

    这篇文章主要介绍了python中使用.py配置文件的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Python中如何快速解析JSON对象数组

    Python中如何快速解析JSON对象数组

    由于浏览器可以迅速地解析JSON对象,它们有助于在客户端和服务器之间传输数据,本文将描述如何使用Python的JSON模块来传输和接收JSON数据
    2023-09-09
  • Python 使用 multiprocessing 模块创建进程池的操作方法

    Python 使用 multiprocessing 模块创建进程池的操作方法

    在现代计算任务中,尤其是处理大量数据或计算密集型任务时,使用并行处理可以显著提升程序性能,Python的multiprocessing模块提供了创建进程池的功能,通过预先创建的进程来并发执行任务,避免了频繁的进程创建和销毁,感兴趣的朋友一起看看吧
    2024-10-10
  • 学习Python列表的基础知识汇总

    学习Python列表的基础知识汇总

    本文给大家汇总介绍了学习Python列表的一些基础知识,有了这份python列表的资料,对大家初识Python列表会非常有帮助,希望大家喜欢
    2020-03-03

最新评论