python之web模块学习-- urllib

准备写一些列的 python之web模块学习,基本上涉及常用的的web模块,包括 urllib、urllib2、httplib、urlparse、requests,现在,开始我们的第一个模块的学习吧。

1  urllib简介

python urllib 模块提供了一个从指定的URL地址获取网页数据,然后对其进行分析处理,获取我们想要的数据。

2  常用方法

2.1  urlopen  -- 创建一个类文件对象 为读取指定的URL

help(urllib.urlopen)

urlopen(url, data=None, proxies=None)
    Create a file-like object for the specified URL to read from.
参数:
    url :表示远程数据的路径,一般是http或者ftp路径。
    data :表示以get或者post方式提交到url的数据。
    proxies :表示用于代理的设置。

Python 通过urlopen函数来获取html数据,urlopen返回一个类文件对象,它提供了如下常用方法:

1)read() , readline() , readlines(),fileno()和close():这些方法的使用与文件对象完全一样。
    2)info():返回一个httplib.HTTPMessage 对象,表示远程服务器返回的头信息。
    3)getcode():返回Http状态码,如果是http请求,200表示请求成功完成;404表示网址未找到。
    4)geturl():返回请求的url地址。

附代码:

>>> import urllib
>>> response = urllib.urlopen(‘http://www.51cto.com‘) 
>>>res.read()
。。。。。。(一堆网页代码)
>>>res.readline()
‘<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r\n‘ 
。。。。
>>>res.readlines()
。。。(list形式的一堆网页代码)
>>>res.info()
<httplib.HTTPMessage instance at0x1a02638>
>>> response.getcode()  # 返回Http状态码
    200
>>> response.geturl() # 返回请求的url地址 
    ‘http://www.51cto.com‘
>>> response.close() # 最后别忘了关闭连接

urllib中还提供了一些辅助方法,用于对url进行编码、解码。url中是不能出现一些特殊的符号的,有些符号有特殊的用途。我们知道以get方式提交数据的时候,会在url中添加key=value这样的字符串,所以在value中是不允许有‘=‘,因此要对其进行编码;与此同时服务器接收到这些参数的时候,要进行解码,还原成原始的数据。这个时候,这些辅助方法会很有用:

附带的其他方法:(主要是url编码解码)

- 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‘: ‘wklken‘, ‘pwd‘:‘123‘}将被转换为"name=wklken&pwd=123"  (常用)
#这里可以与urlopen结合以实现post方法和get方法
- urllib.pathname2url(path):将本地路径转换成url路径
- urllib.url2pathname(path):将url路径转换成本地路径

附代码:

>>> import urllib
>>>res = urllib.quote(‘I am 51cto‘)
>>> res
‘I%20am%2051cto‘
>>>urllib.unquote(res)
‘I am 51cto‘
>>>res = urllib.quote_plus(‘I am 51cto‘)
>>> res
‘I+am+51cto‘
>>>urllib.unquote_plus(res)
‘I am 51cto‘
>>> params = {‘name‘:‘51cto‘,‘pwd‘:‘51cto‘}
>>>urllib.urlencode(params)
‘pwd=51cto&name=51cto‘
>>>l2u=urllib.pathname2url(‘E:\51cto‘)
‘E%3A%29cto‘
>>>urllib.url2pathname(l2u)
‘E:)cto‘

2.2 urlretrieve -- 直接将远程的数据下载到本地

help(urllib.urlretrieve)
urlretrieve(url, filename=None,reporthook=None, data=None)
参数:
    url :指定下载的URL
    finename :指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。
    reporthook :是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
    data: 表示post到服务器的数据,该方法返回一个包含两个元素的(filename,headers)元组,

下面是一个 urlretrieve方法下载文件的实例,可以显示下载进度:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
import os

def schedule(a,b,c):
    ‘‘‘ 回调函数
    @a:已经下载的数据
    @b:数据块的大小
    @c:远程文件的大小
    ‘‘‘

    per = 100.0 * a * b / c
    if per > 100:
        per = 100
    print "%.2f%%" % per
url = ‘http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2‘
local = os.path.join(‘c:‘,‘Python-2.7.5.tar.bz2‘)
urllib.urlretrieve(url,local,schedule)

2.3  urlcleanup -- 清除由于urllib.urlretrieve()所产生的缓存

通过上面的练习可以知道,urlopen可以轻松获取远端html页面信息,然后通过python正则对所需要的数据进行分析,匹配出想要用的数据,然后利用urlretrieve将数据下载到本地。对于访问受限或者对连接数有限制的远程url地址可以采用proxies(代理的方式)连接,如果远程数据量过大,单线程下载太慢的话可以采用多线程下载,这个就是传说中的爬虫。

上面介绍的前两个方法是urllib中最常用的方法,这些方法在获取远程数据的时候,内部会使用URLopener或者 FancyURLOpener类。作为urllib的使用者,我们很少会用到这两个类。如果对urllib的实现感兴趣,或者希望urllib支持更多的协议,可以研究这两个类。在Python手册中,urllib的作者还列出了这个模块的缺陷和不足,感兴趣的可以打开 Python手册了解一下。

urllib :https://docs.python.org/2/library/urllib.html

时间: 2024-10-07 06:30:29

python之web模块学习-- urllib的相关文章

python之web模块学习-- urllib2

下面继续学习python的web模块 ---  urllib2,一个源于urllib又高于urllib的模块. 1  urllib2 简介 urllib2是python自带的一个访问网页及本地文件的库. 与urllib相比,显著区别之处在于: 1) urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL.这意味着,用urllib时不可以伪装User Agent字符串等. 2) urllib提供urlencode方法用来encode发送的da

python之web模块学习-- urlparse

继续学习python的web模块,urlparse 是一个比较简单的模块,主要是用来 解析URL字符串的 1  urlparse简介 python使用urlparse来解析URL字符串 主要方法: urlprase 次要方法: urljoin urlsplit  urlunsplit等 2  urlparse详解 urlparse模块主要是把url拆分为6部分,并返回元组.并且可以把拆分后的部分再组成一个url.主要有函数有urljoin.urlsplit.urlunsplit.urlparse

python之web模块学习-- httplib

1  httplib简介 httplib 是python中http协议的客户端实现,可以使用该模块来与 HTTP 服务器进行交互 httplib是一个相对底层的http请求模块,其上有专门的包装模块,如urllib内建模块,goto等第三方模块,但是封装的越高就越不灵活,比如urllib模块里请求错误时就不会返回结果页的内容,只有头信息,对于某些需要检测错误请求返回值的场景就不适用,所以就得用这个模块了. httplib实现了HTTP和HTTPS的客户端协议,一般不直接使用,在python更高层

Python随机数random模块学习,并实现生成6位验证码

一.前言 学习python随机数random模块的使用 ,并使用模块中的函数,实现6位验证码生成 二.random模块 1.random.random() 返回0-1直接的随机数,类型为float >>>print(random.random()) 0.1259184691662908 2.random.randint(1, 8) 返回1-8直接的随机数,包括8 >>>print(random.randint(1, 8)) 3 3.random.choice() 从一个

[ python编程 ] subprocess模块学习总结

转载:http://www.jb51.net/article/48086.htm 从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn*.os.popen*.popen2.*.commands.*不但可以调用外部的命令作为子进程,而且可以连接到子进程的input/output/error管道,获取相关的返回信息. 一.subprocess以及常用的封装函数    运行python的时候,我们都是在创建并

Python的hashlib模块学习

python的hashlib模块提供一些常用的加密功能 例如获取字符串'Nobody inspects the spammish repetition'的MD5校验值 In [48]: import hashlib In [49]: m=hashlib.md5() In [50]: m.update('Nobody inspects') In [51]: m.update('the spammish repetition') In [52]: m.digest() Out[52]: '%\x8d

python简易web服务器学习笔记(二)

import BaseHTTPServer #------------------------------------------------------------------------------- class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): '''Respond to HTTP requests with info about the request.''' # Template for page to sen

Python re正则表达式模块学习【转】

感谢原作者,本文转自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 博主还有一些比较好的python文档在此一并推荐,可以移步查看. 文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whate

python模块学习——urllib模块

参考学习:http://www.blogjava.net/ashutc/archive/2011/03/21/346695.html 1.urllib.quote()函数 模拟登录时,对用户名进行处理: 1 def GetUserName(userName): 2 userNameTemp = urllib.quote(userName) 3 userNameEncoded = base64.encodestring(userNameTemp)[:-1] 4 return userNameEnc