一、读取网页
1、使用自带的urllib模块:
- 引入自带的模块urllib
- 使用文件里面的urlopen模块
(1)发送的是get请求:
from urllib.request import urlopen url='http://www.nnzhp.cn/archives/423' res=urlopen(url).read() #打开url,获取url的网页内容 发送的是get请求 print(res.decode()) #将结果返回的二进制类型转为字符串类型
(2)发送的是post请求:
from urllib.parse import urlencode #由于不能直接传字典,要传二进制格式,所以导入该模块 url='http://api.nnzhp.cn/api/user/login' data={'username':'niuhanyang','passwd':'aA123456'} data=urlencode(data) #先将字典拼接成k-v格式 print(data) #结果:username=niuhanyang&passwd=aA123456 res=urlopen(url,data.encode()).read() #再将k-v格式转成二进制 print(res.decode()) #将返回的二进制转成字符串再返回 import json d=json.loads(res.decode()) #为了获取value值,要将字符串转成字典 print(d.get('login_info).get('sign') #获取sign的value值
2、使用requests模块:
- 需要导入该模块:pip install requests
(1)发送的是get请求:
import requests url='http://www.nnzhp.cn/archives/423' res=requests.get(url) print(res.text) #使用.text就不用decode()了,直接返回的就是字符串
(2)发送的是post请求:
url='http://api.nnzhp.cn/api/user/login' res=requests.post(url,data={"username":"niuhanyang","passwd":"aA123456"} print(res.json()) #直接返回的就是字典,这个模块里面已经封装好了由json串转为字典的代码 print(res.text) #返回的是字符串,json串
(a)post请求带参数,上传的是字典格式,使用data={}:
url='http://api.nnzhp.cn/api/user/login' res=requests.post(url,data={"username":"niuhanyang","passwd":"aA123456"} print(res.json()) #直接返回的就是字典,这个模块里面已经封装好了由json串转为字典的代码 print(res.text) #返回的是字符串,json串
(b)get请求带参数,上传的是字典格式,使用params={}:
url='http://api.nnzhp.cn/api/user/login' res=requests.get(url,params={"username":"niuhanyang","passwd":"aA123456"} print(res.json()) #直接返回的就是字典,这个模块里面已经封装好了由json串转为字典的代码 print(res.text) #返回的是字符串,json串
二、下载内容
1、下载文件:
- 打开一个文件,将读取的网页内容写入到文件里,就相当于将内容下载到本地了。
url='http://api.nnzhp.cn/api/user/login' res=requests.post(url,data={"username":"niuhanyang","passwd":"aA123456"} f=open('a.html','w',encoding='utf-8') #打开一个文件 f.write(res) #将读取的网页写入到文件里,就相当于将网页下载到本地 f.close() #关闭文件
2、下载mp3:
- 导入requests模块
- 使用.content方法,直接返回的就是二进制内容
MP3_url='http://qiniuuwmp3.changba.com/1113525663.mp3' res=requests.get(MP3_url) mp3=res.content #返回的是二进制内容 f=open('sing.mp3','bw') #保存内容到本地 f.write(mp3) f.close()
三、Requests模块返回内容
- .json()方法返回的是字典
url='http://api.nnzhp.cn/api/user/login' res=requests.post(url,data={"username":"niuhanyang","passwd":"aA123456"} print(res.json()) #直接返回的就是字典
- .text返回的是字符串
import requests url='http://www.nnzhp.cn/archives/423' res=requests.get(url) print(res.text) #使用.text就不用decode()了,直接返回的就是字符串
- .content返回是二进制
MP3_url='http://qiniuuwmp3.changba.com/1113525663.mp3' res=requests.get(MP3_url) mp3=res.content #返回的是二进制内容
四、请求带参数
- 使用requests模块时
(a)post请求带参数,上传的是字典格式,使用data={}
(b)get请求带参数,上传的是字典格式,使用params={}
(c)post请求带参数,上传的是json串,使用json={}
五、实际应用
1、下载mp3:
- 导入requests模块
- 使用.content方法,直接返回的就是二进制内容
MP3_url='http://qiniuuwmp3.changba.com/1113525663.mp3' res=requests.get(MP3_url) mp3=res.content #返回的是二进制内容 f=open('sing.mp3','bw') #保存内容到本地 f.write(mp3) f.close()
2、发送cookie:
- 使用关键字cookies
- 有多个cookie的时候逐个写入,用逗号隔开
res=requests.get(url,params={"k":"v","k1":"v"},cookies={"sss":"xxx","xxx":"xxx"})
3、发送headers:
- 使用关键字headers
- 有多个header的时候逐个写入,用逗号隔开
res=requests.get(url,params={"k":"v","k1":"v"},cookies={"sss":"xxx","xxx":"xxx"},headers={"xxx":"xxx","xxx":"xxx"})
如果cookie内容很多,可以利用headers,将内容写到一个字符串里作为value值,key的值为cookie即可。
s='pgv_pvi=2531856384; RK=OHwkPOBgdj; ptcz=993813dc462da58d0efd9c1c8d03124c48754c9fccf24ce6b2d9368a462ed230; pt2gguin=o0961813439; pgv_pvid=7944371706; o_cookie=961813439; pac_uid=1_961813439; eas_sid=x1O5L366d2l1h5f3d4q0U6Z2F1; _qpsvr_localtk=0.24147254941682927; pgv_si=s8574745600; uin=o0961813439; pgv_info=ssid=s6318813470; skey=@DBbSi69hx; p_uin=o0961813439; pt4_token=jVWe4EaLYK760H4Ep-j0BxkdDj917sUw6S5hMXuur28_; p_skey=*r63etdnFjY2mlXWh-rmfuT7s1K1SLl077FdOHXO6Vk_' res=requests.get(url,params={'k':'v','k1':'v'},headers={'cookie':s})
4、上传文件:
url='http://api.nnzhp.cn/api/file/file_upload' res=requests.post(url,files={'file':open('g.mp3','rb')} #使用二进制方式打开 print(res.json())
5、上传的是json串:
url='http://api.nnzhp.cn/api/user/add_stu' data={"phone":"13277778889","grade":"三年二班","name":"颜无柳"} requests.post(url,json=data) #传参传的是json串 print(res.json())