网页下载器是将URL对应的网页以html的形式下载到本地存储成一个本地文件或字符串。
1. urllib使用方法:
(1)处理 get 请求。不传 data,则为 get 请求
import urllib
from urllib.request import urlopen
from urllib.parse import urlencode
url=‘http://127.0.0.1:1990/login’
data={“username”:“admin”,“password”:123456}
req_data=urlencode(data)
#将字典类型的请求数据转变为url编码
res=urlopen(url+’?’+req_data)
#通过urlopen方法访问拼接好的url
res=res.read().decode()
#read()方法是读取返回数据内容,decode 是转换返回数据的bytes格式为str
print(res)
(2)处理 post 请求,如果传了 data,则为 post 请求
import urllib
from urllib.request import urlopen
from urllib.request import Request
from urllib.parse import urlencode
url=‘http://127.0.0.1:1990/login’
data={“username”:“admin”,“password”:123456}
data=urlencode(data)
data=data.encode(‘ascii’)
#将url编码类型的请求数据转变为bytes类型(二进制数据)
req_data=Request(url,data )
#将url和请求数据处理为一个Request对象,供urlopen调用
with urlopen(req_data) as res:
res=res.read().decode()
print(res)
2. requests 使用方法:
(1)处理 get 请求
import requests
url=‘http://127.0.0.1:1990/login’
data={“username”:“admin”,“password”:123456}
res=requests.get(url, data)
#直接用requests.get(url, data)即可,其中.get表示为get方法,不需要对字典类型的data进行处理
res=res.text
#text方法是获取到响应为一个str,也不需要对res进行转换等处理
res=res.json() #当返回的数据是json串的时候直接用.json即可将res转换成字典
print(res)
(2)处理 post 请求
import requests
url=‘http://127.0.0.1:1990/login’
data={“username”:“admin”,“password”:123456}
res=requests.post(url, data)
res=res.text
res=res.json()
print(res)
(3)当传参格式要求为 json 串
import requests
url=‘http://127.0.0.1:1990/login’
data={“username”:“admin”,“password”:123456}
res=requests.post(url, json=data)
#只需要在这里指定data为json即可
res=res.text
res=res.json()
print(res)
(4)当传参含 cookie
import requests
url=‘http://127.0.0.1:1990/login’
data={“username”:“admin”,“password”:123456}
cookie={“sign”:“123abc”}
res=requests.post(url, json=data, cookies=cookie)
#只需要在这里指定cookies位cookie即可,headers,files等类似
res=res.json()
print(res)
3. 总结:python3 中 urllib 和 requests 的区别?
1、urllib 是 python 中自带的库,而 requests 则需要 pip install 安装;
2、构建参数方式不同。
urllib 需要先使用 urlencode 方法进行编码预处理,即将字典型请求转换为 url 编码,再通过 urlopen 方法访问拼接好的 url,读取返回数据先用 read 方法再用 decode 方法解码得到字符串;
而 requests 直接使用 get 方法,不需要对字典型数据进行转换处理,读取返回数据时直接用 text 方法获取字符串,无需 decode 解码。且可以直接用 json 方法将返回数据转换成字典;
3、处理响应的方式不同。
urllib 在处理消息头部、响应状态码以及响应正文时用 info()、getcode() 以及 read() 方法;
requests 则用 headers、status_code 以及 text 方法,方法名称与功能本身对应,便于理解和使用;
4、连接方式不同。
观察一下返回数据的头部信息 “connection”,
使用 urllib 时,“connection”:“close”,说明每次请求结束后会关闭 socket 通道;
使用 requests 时,“connection”:“keep-alive”,说明每次请求使用同一个 socket,消耗更少的资源。