记录一下urllib 模块的各个方法:
- urllib.request.urlopen(url,timeout = socket._GLOBAL_DEFAULT_TIMEOUT)
读取网址的内容,他一般和读取网址的内容一起使用
返回值是一个可迭代的对象”http.client.HTTPResponse’
timeout 设置超时时间 - file.read()
- file.readline()
- file.readlines()
这三个方法放在一起说,
他们都是用来读取’http.client.HTTPResponse’
这个对象的内容的,
- file.read()返回的是网址的全部内容,bytes 类型
- file.readline() 返回的是网址的一行内容. 每次调用这个方法都会返回下一行的内容 bytes类型
- file.readlines() 返回的网址的每行内容的一个list列表。list里面也是bytes 类型
urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)
这个方法可以直接把网页保存到本地,filename 是用来存放文件的路径,如果不设置,他会在系统中生成一个临时文件,临时文件的路径可以在这个方法的返回值中查看,reporthook他是用来写callback的 ,是保存完成之后的接口回调, data使用来网络请求是向服务器post参数的def callback(a, b, c): '''回调函数 @a: 已经下载的数据块 @b: 数据块的大小 @c: 远程文件的大小 ''' pass
urlretrieve 方法返回的是一个tuple
(‘./test2/Python-2.7.5.tar.bz2’, http.client.HTTPMessage object at 0x000001B5806A0D68)- urllib.urlopen(url).info()
返回的是一个http.client.HTTPMessage object at 0x000001B5806A0D68 - urllib.urlopen(url).getcode()
返回的是一个http的状态码 - urllib.requset.quote(url)
url转为URL编码 - urllib.request.unquote(url)
URL编码进行转码为utf-8 urllib.request.build_opener()
可以使用这个方法来修改user-agentfrom urllib import request url = "http://www.baidu.com" headers = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' opener = request.build_opener() opener.addheaders = [('User-Agent',headers)] file = opener.open(url) data = file.read()
urllib.request.Request()
import urllib.request url = "http://www.baidu.com" req = urllib.request.Request(url) req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36') data = urllib.request.urlopen(req).read()
设置proxty
def use_proxy(proxy_addr , url): import urllib.request proxy = urllib.request.ProxyHandler({'http':proxy_addr}) httphd = urllib.request.HTTPHandler(debuglevel=1) httpshd= urllib.request.HTTPSHandler(debuglevel=1) opener = urllib.request.build_opener(proxy, httphd, httpshd) urllib.request.install_opener(opener) data = urllib.request.urlopen(url).read().decode('utf-8') return data proxy_addr = '222.184.112.18:8888' data = use_proxy(proxy_addr, "http://www.baidu.com/") print(data)
proxy_addr 可以从 “http://www.xicidaili.com” 来获取
开启DebugLog
import urllib.request httphd = urllib.request.HTTPHandler(debuglevel = 1) httpshd= urllib.request.HTTPHandler(debuglevel = 1) opener = urllib.request.build_opener(httphd, httpshd) urllib.request.install_opener(opener) data = urllib.request.urlopen("http://www.baidu.com")
这个就是一些简单的介绍,其实实际开发的时候我也不经常用这个模块,只是返回来总结总结,实际开发的时候推荐大家使用requests,这个模块的功能比较强大,而且代码量也会更少,我们为什么用python,就是他优雅的写法,以及无比少的代码就能实现强大的功能