标准模块urllib已被拆分为多个部分,在python3中将其重命名为urllib.request, urllib.parse,和urllib.error.
官方说明文档
简单介绍
urllib.urlopen(url [,data [,代理[,context ] ] ] )
打开URL对以进行读取。
如果URL没有方案标识符,则将打开本地文件;否则,它将打开网络上某个服务器的套接字。
如果无法建立连接,则会引发IOError异常。
如果成功,则返回类似文件的对象,该支持了以下方法:
read(),readline(),readlines(),fileno(), close(),info(),getcode()和geturl()。
import urllib.parse,urllib.request
params = urllib.parse.urlencode({'keyword':'晚熟的人'})
f = urllib.request.urlopen("https://search.jd.com/Search?%s" % params)
n = '\n'
print(f.getcode(),n,
f.fileno(),n,
f.info(),n,
f.geturl(),n,
f.readline(),n,
f.readlines(),n,
f.close())
输出结果
200
788
Date: Fri, 04 Dec 2020 07:38:29 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: Accept-Encoding
Expires: Fri, 04 Dec 2020 07:38:28 GMT
Cache-Control: max-age=0
Server: jfe
Strict-Transport-Security: max-age=7776000
https://search.jd.com/Search?keyword=%E6%99%9A%E7%86%9F%E7%9A%84%E4%BA%BA
b"<script>window.location.href='https://passport.jd.com/uc/login'</script>"
[]
None
urllib.urlretrieve(url [,filename [,reporthook [,data [,context ] ] ] ] )
将URL表示的网络对象复制到本地文件,返回值为元组。
url 参数,如果URL指向本地文件,或者存在对象的有效缓存副本,则不会复制该对象。
filename参数(如果存在)指定要复制到的文件位置(如果不存在,则该位置将是具有生成名称的临时文件)。
reporthook 参数(如果存在)是可调用的,它将在建立网络连接时被调用一次,此后每个块读取一次。
可调用对象将传递三个参数:到目前为止已传输的块数,块大小(以字节为单位)以及文件的总大小。
如果url使用http:方案标识符,则可以提供可选的data 参数以指定POST请求(通常,请求类型为GET)。
可以将context参数设置为一个ssl.SSLContext实例,以配置在urlretrieve()建立HTTPS连接时使用的SSL设置。
import urllib.request
def sayHello(blockNum,blockSize,totalSize):
print('BlockSize=%d,'
'BlockNumber=%d,'
'TotalSize=%d,'
'LeftSize=%d'%(blockNum,blockSize,totalSize,totalSize-blockSize*blockNum if totalSize-blockSize*blockNum>0 else 0))
file = urllib.request.urlretrieve(url='https://docs.python.org/2/library/urllib.html',filename='temp.html',reporthook=sayHello,data=None)
输出结果
BlockSize=0,BlockNumber=8192,TotalSize=69794,LeftSize=69794
BlockSize=1,BlockNumber=8192,TotalSize=69794,LeftSize=61602
BlockSize=2,BlockNumber=8192,TotalSize=69794,LeftSize=53410
BlockSize=3,BlockNumber=8192,TotalSize=69794,LeftSize=45218
BlockSize=4,BlockNumber=8192,TotalSize=69794,LeftSize=37026
BlockSize=5,BlockNumber=8192,TotalSize=69794,LeftSize=28834
BlockSize=6,BlockNumber=8192,TotalSize=69794,LeftSize=20642
BlockSize=7,BlockNumber=8192,TotalSize=69794,LeftSize=12450
BlockSize=8,BlockNumber=8192,TotalSize=69794,LeftSize=4258
BlockSize=9,BlockNumber=8192,TotalSize=69794,LeftSize=0
urllib.urlcleanup()
清除调用可能建立的缓存 urlretrieve()。
urllib.request.urlcleanup()
urllib.ContentTooShortError(msg[, content])
如果URL内容过少抛错
urllib.request.ContentTooShortError('Warning','Content is to less')
urllib.quote(string[, safe])
引用特殊字符
quote = urllib.request.quote('/n~connolly/',safe='/',encoding='utf8')
输出结果
/n~connolly/
urllib.unquote(string)
将%xx转义符替换为它们的等效单字符
quote = urllib.request.unquote('/%7Econnolly/',encoding='utf-8')
输出结果
/~connolly/
urllib.url2pathname(path)
将URL转换为本地路径
url = urllib.request.url2pathname('https://search.jd.com/Search?keyword=%E6%99%9A%E7%86%9F%E7%9A%84%E4%BA%BA')
输出结果
S:\search.jd.com\Search?keyword=晚熟的人
urllib.pathname2url(path)
将本地路径转URL
url = urllib.request.pathname2url('F:\Pythonfiles\DataAnalysis')
输出结果
///F:/Pythonfiles/DataAnalysis
urllib.getproxies()
获取本机的http代理
proxies = urllib.request.getproxies()
print(proxies)
输出结果
{}
urllib.URLopener([proxies[, context[, **x509]]])
打开,读写URL的基类,有如下方法(属性):
open(fullurl[, data])
使用适当的协议打开URL
retrieve(url[, filename[, reporthook[, data]]])
打开并缓存URL
version:显示Python版本
import urllib.request
def sayHello(blockNum,blockSize,totalSize):
print('BlockSize=%d,'
'BlockNumber=%d,'
'TotalSize=%d,'
'LeftSize=%d'%(blockNum,blockSize,totalSize,totalSize-blockSize*blockNum if totalSize-blockSize*blockNum>0 else 0))
opener = urllib.request.URLopener()
filehandle = opener.open('https://docs.python.org/2/library/urllib.html')
opener.retrieve(url='https://docs.python.org/2/library/urllib.html',filename='temp.html',reporthook=sayHello,data=None)
print(opener.version,'\n',filehandle)
输出结果
BlockSize=0,BlockNumber=8192,TotalSize=69794,LeftSize=69794
BlockSize=1,BlockNumber=8192,TotalSize=69794,LeftSize=61602
BlockSize=2,BlockNumber=8192,TotalSize=69794,LeftSize=53410
BlockSize=3,BlockNumber=8192,TotalSize=69794,LeftSize=45218
BlockSize=4,BlockNumber=8192,TotalSize=69794,LeftSize=37026
BlockSize=5,BlockNumber=8192,TotalSize=69794,LeftSize=28834
BlockSize=6,BlockNumber=8192,TotalSize=69794,LeftSize=20642
BlockSize=7,BlockNumber=8192,TotalSize=69794,LeftSize=12450
BlockSize=8,BlockNumber=8192,TotalSize=69794,LeftSize=4258
BlockSize=9,BlockNumber=8192,TotalSize=69794,LeftSize=0
Python-urllib/3.7
<addinfourl at 1656479719776 whose fp = <http.client.HTTPResponse object at 0x000001819BD67828>>