# -*- coding: utf-8 -*-

# python:2.x

__author__ = 'Administrator'

#使用python创建一个简单的WEB客户端

import urllib,urllib2,urlparse

"""

web地址元素

URL部件                 描述

prot_sch             网络协议或者下载规划

nety_loc             服务器位置(或者也有用户信息)

path                 斜杠(/)限定文件或者CGI应用程序路径

query                连接符(&)连接键值对

params               可选参数

frag                 拆分文档中特殊锚

网络定位元素

net_loc

部件                   描述

user                   用户名

password               密码

host                 web服务器运行机器名或者地址(必须字段)

port                 端口号(默认为80)

"""

#urlparse.urlparse()urlparse(url, scheme='', allow_fragments=True)

"""

将url解析成一个6元组(prot_sch,net_loc,path,params,query,frag)

当url中没有提供默认网络协议或者下载规划时可以使用scheme,allw_fragments标识一个URL是否允许使用零部件

"""

#例如

#print urlparse.urlparse('http://www.python.org/doc/FAQ.html')

#ParseResult(scheme='http', netloc='www.python.org', path='/doc/FAQ.html', params='', query='', fragment='')

#urlparse.urlunparse()功能与urlparse.urlparse()相反:它是拼合一个6元组(prot_sch,net_loc,path,params,query,frag)

#url1=urlparse.urlparse('http://www.163.com')

#print urlparse.urlunparse(url1)

#urlparse.urljoin()进行多个结合一起

##                       'photo.shtml')

"""urllib

支持WEB协议,HTTP,FTP,GOPHER协议,可以进行上载下载,避免使用以前的那些模块

"""

#urllib.urlopen()打开一个给定的URL字符串与WEB连接,返回文件类型

#语法urllib.urlopen(url,data=None,proxies=None):如果没有给定协议或者下载,或者文件规划早已给出,它会打开本地文件

"""

对于所有HTTP请教,常见的请求是GET,在这样的情况下,WEB服务器会发送请求字符串(编码键值或者引用)

如果要求使用POST方法信息,请查看CGI应用编程部分普通文档或者文本。

f.info()方法返回MIME(多目标因特网邮件扩展,Multipurpose internet mail extension)头文件,这个头文件通知浏览器返回文件类型可以是那类应用程序打开

geturl()方法在考虑了所有可能发生间接导向后,从最终打开的文件中获得真实的URL

"""

"""

urllilb.urlopen()方法如下

对象方法                                       描述

f.read([bytes])              从f中读出所有或者bytes个字节

f.readline()                 从f中读出一行

f.readlines()                读取所有行返回一个列表

f.close()                    关闭连接

f.fileno()                   返回f文件句柄

f.geturl()                   返回f所打开的真正URL

如果需要复杂的URL或者要处理复杂的情况,比如cookie等问题,建议使用urllib2模块

"""

#urllib.urlretrieve(url,fulename=None,reporthook=None,data=None)当需要URL文档时,可以使用它

"""

reporthook这个函数会在每块数据下载或者传输完之后被调用,3个参数:目前读入块数,块的字节数和文件字节数,

urlretrieve()返回一个2元组,(filename,mime_hdrs),filename包含下载数据本地文件名,mime_hdrs是对WEB服务器响应后返回一系列MIME文件判断

更多信息可以看mimetools的message类,对于本地文件来说mime_hdrs是空的

"""

#urllib.quote()和urllib.quote_plus()

"""

quote*()函数获取URL数据,将其编码,从而适用于URL字符串中,对于一些不能被打印或者不被WEB服务器作为有效的URL接收特殊字符串可以使用此函数

语法如

quote(urldata,safe='/')

"""

#例如

# name='jon mama'

# number=6

# base='http://www/~foo/cgi-bin/s.py'

# final='%s?name=%s&num=%d'%(base,name,number)

# print final

# print urllib.quote(final)

# print urllib.quote_plus(final)

#urllib.unquote(),urllib.unquote_plus()这2个函数功能完全相反,将所有编码'%xx'式的字母转换成它们的ascii值

#调用unquote()函数会把s中所有URL编码字母都解码,返回字符串,urllib.unquote_plus()函数会将加号转换成空格符

#urllib.urlencode()它是接收字典键-值对,将其编译成CGI请求的URL字符串,键值对格式:键=值,以连接符&划分,更进一步,键和它们值被传到quote_pluis()进行适当的编码

#例如

adict={'name':'georgion garica','b':'c'}

print urllib.urlencode(adict)

#urllib方法的例子学习

url1='http://cnblogs.com'

#代理服务器

proxies={'http':'http://cnblogs.com'}

#使用代理服务器打开

r=urllib.urlopen(url1,proxies=proxies)

print r.info()

print r.getcode()

print r.geturl()

#打开本地文件

f=urllib.urlopen(url='file:/f:/from2.html')

#print f.read()

#print f.readline()

print f.readlines()

#打开ftp服务器

#f = urllib.urlopen(url = 'ftp://username:password@ftpaddress')

#保存网页显示进度

def urlabc(a,b,c):

"""

a:数量

b:大小

c:状态

"""

per=100.*a*b/c

if per>100:

per=100

print '%.2f%%'%per

url='http://www.oschina.net/news/55121/tiobe-2014-9'

local='oschina.net'

print  urllib.urlretrieve(url,local,urlabc)

#get方法

params=urllib.urlencode({'s':1,'b':2,'c':3})

f=urllib.urlopen("http://www.musi-cal.com/cgi-bin/query?%s" % params)

print f.read()

print '*'*300

#post方法

params=urllib.urlencode({'s':1,'b':2,'c':3})

f=urllib.urlopen("http://www.musi-cal.com/cgi-bin/query?%s" % params)

print f.read()

print '*'*300

#编码解码

data='name=~a+3'

data1=urllib.quote(data)

print data1

print urllib.unquote(data1)

data2=urllib.quote_plus(data)

print data2

print urllib.unquote_plus(data2)

data3 = urllib.urlencode({ 'name': 'dark-bull', 'age': 200 })

print data3

data4=urllib.pathname2url(r'F:\qtgui\netword1\oschina.net')

print data4

print urllib.url2pathname(data4)

python urllib基础学习的更多相关文章

  1. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  2. Python入门基础学习 二

    Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...

  3. Python入门基础学习 一

    Python入门基础学习 一 Python下载及安装 下载地址:https://www.python.org/,选择最新的版本下载 稍等一会,安装完成. 简单语句 从idle启动Python:IDLE ...

  4. python函数基础学习

    函数的定义与调用: def 函数名(参数1,参数2): ‘’’函数注释’’’ print(‘函数体’) return 返回值 定  义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def ...

  5. Python入门基础学习(文件与异常处理)

    Python基础学习笔记(七) 捕获异常的语法格式: 文件的基本操作: 打开文件 读.写文件 关闭文件 read方法 --读取文件: open函数的第一个参数是要打开的文件名(文件名区分大小写) 如果 ...

  6. Python入门基础学习(时间模块,随机模块)

    Python基础学习笔记(六) time模块: 时间的三种表示方法: 1.格式化字符串 2.时间戳 用来表示和1970年的时间间隔,单位为s 3.元组 struct_time 9个元素 time的st ...

  7. Python入门基础学习(模块,包)

    Python基础学习笔记(五) 模块的概念:模块是python程序架构的一个核心概念 每个以拓展名py结尾的python源代码文件都是一个模块 模块名同样也是一个标识符,需要符合标识符的命名规则 在模 ...

  8. Python入门基础学习(面向对象)

    Python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...

  9. Python入门基础学习(函数)

    Python基础学习笔记(三) 函数的概念: 所谓函数,就是把具有独立功能的代码块组织为一个小模块,在需要的时候调用 函数的使用包含两个步骤: 1.定义函数 --封装独立的功能 2.调用函数 --享受 ...

随机推荐

  1. python使用deque实现fifo(先进先出)

    #2:deque还提供了append 和pop方法,在序列的两端都能以相同的速度执行#例子2:使用deque实现fifo(先进先出),如下:from collections import dequei ...

  2. NetAnalyzer笔记 之 五 一些抓包技巧分享(不定期更新)

    [创建时间:2016-03-12 10:00:00] [更新时间:2016-05-21 10:00:00] NetAnalyzer下载地址 前一段时间应为工作关系,NetAnalyzer笔记系列已经很 ...

  3. hibernate-4.3.5安装配置

    起初照着官方文档配,一直出错,貌似官方的文档时错的,查了非常多资料,综合整理了一个可行的方案,例如以下: 0.1包结构 test.demo test.domain  //实体类 test.util// ...

  4. POJ 2392 Space Elevator 背包题解

    多重背包.本题不须要二分优化.相对简单点.由于反复数十分小,小于10. 而添加一个限制每种材料的高度做法.假设使用逆向填表,那么仅仅须要从这个高度往小递归填表就能够了. 还有就是注意要排序,以限制高度 ...

  5. 信息熵(Entropy)究竟是用来衡量什么的?

    信息熵(Entropy)究竟是用来衡量什么的? ——与Philip ZHANG商榷 思明 Philip ZHANG先生在反驳彭小明的时候,提出一个观点,他说:“ 就语言文 字来说,总体效率不是用民族主 ...

  6. [RxJS] Getting Input Text with Map

    By default, Inputs will push input events into the stream. This lesson shows you how to use map to c ...

  7. [Cycle.js] Introducing run() and driver functions

    Currently the code looks like : // Logic (functional) function main() { return { DOM: Rx.Observable. ...

  8. (转) 值不能为空。参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explorer)

    打开MSSQL 2008 R2的时候,展开数据库都显示以下的错误提示: 值不能为空.参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explo ...

  9. (转)CSS 禁止浏览器滚动条的方法

    1.完全隐藏 在里加入scroll="no",可隐藏滚动条:    这个我用的时候完全没效果,不知道是什么原因!不过好多人说这么用可以,大概是用的位置不一样吧   2.在不需要时隐 ...

  10. iscroll源码初涉

    最近尝试做web app时候,用上了神器iScroll,鉴于功力尚浅,并没有完全用好神器,所以今天特意来认真学习! 翻开官网,目前的版本是5,但是相关的文章并不多,具体的文件版本是: iscroll. ...