Python——requests模块
requests模块是python的一个第三方模块,它是基于python自带的urllib模块封装的,用来发送http请求和获取返回的结果,操作很简单。
requests模块是第三方模块,不是python自带的,需要安装才可以使用。
pip requests install
发送get请求
1、不带参数、 返回结果为字符串类型:可以使用res.json() 来转成字典
import requests
url = ''www.baidu.com'
res = requests.get(url)
print(res.json())
2、 带参数的get请求
url3 = 'http://118.24.3.40/api/user/stu_info'
param= {'stu_name':'小黑'}
res = requests.get(url3,params=param)
print(res.json())
3、入参需要传入header
url6 = 'http://118.24.3.40/api/user/all_stu'
header = {'Referer':'http://api.nnzhp.cn/'}
res =requests.get(url6,headers=header)
print(res.json())
post请求
1、入参是字典类型的
url2 = 'http://118.24.3.40/api/user/login'
data = {'username':'niuhanyang','passwd':'aA123456'}
res = requests.post(url2,data=data)
print(res.json())
2、入参是json类型的 注意:使用requests的post方式时候,要传递json的值
url4 = 'http://118.24.3.40/api/user/add_stu'
data = {"name":"maomaochongzi",
"grade":"1年级",
"phone":"15801427140",
"sex":"男",
"age":"18",
"addr":"beijing"
}
res = requests.post(url4,json=data)
print(res.json())
3、入参需传递cookie
url5 = 'http://118.24.3.40/api/user/gold_add'
data = {'stu_id':15,'gold':200}
cookie = {'niuhanyang':'35b103503b9f428f1e8a2e258cb2a172'}
res = requests.post(url5,data=data,cookies = cookie)
print(res.json())
4、上传文件,入参为文件类型
url9 = 'http://118.24.3.40/api/file/file_upload'
data = {'file':open('魔鬼天使.mp3','rb')}
res = requests.post(url9,files = data)
print(res.json())
5、下载文件 二进制类型
url9 = 'http://qiniuuwmp3.changba.com/1084511584.mp3'
res = requests.post(url9)
with open('天数恶魔.p3',wb) as frw
fw.write(res.content)
6、如果url是https开头的 ,需要加verify = False
url8='https://aliimg.changba.com/cache/photo/855e5493-f018-44db-8892-c8660649327b_640_640.jpg'
res = requests.get(url8,verify = False)
with open('a.jpg','wb') as fw:
fw.write(res.content)
res.json() 必须返回的是json才可以用 返回的是字典
res.text 下载文件的话text就不行了 返回的是字符串
res.content 用来下载文件用的 返回的是二进制的
res.cookies 获取到返回的所有cookie
res.headers 获取到返回的所有herder
http权限认证
有一些网站,比如说下载东西的时候有http的权限验证,没有验证话就返回401 请求未经授权这种错误的。一般都是需要http权限验证,下面是怎么添加http权限验证。
当然这个http权限认证是http本身的,和你那些登陆请求那些不一样,比如说你要调一个登陆接口,传入的账号密码,和那个不是一回事,要区别开。
举个例子呢就是商场的大门上的锁就是这个http权限验证,这个锁是人家商场的,而你的店铺的锁才是你登陆接口,你输入的账号密码。一般你一打开一个网站直接弹出来一个窗口让你输入账号密码,你都看不到页面,这种就是http权限验证。而那种你打开网站之后,直接就能看到页面,你要登录的时候,输入账号密码然后点登录的,这种的就是正常的登陆请求。这种http权限验证的比较少见。
http会话保持
什么是会话保持,就是有一些操作需要登录之后才操作的,你得先登录,然后才能做其他的操作。那咱们做的时候怎么做,先发送登陆的请求,获取到登录的cookie信息,(因为登录之后它的身份验证信息都是放在cookie里面的),然后把cookie传给下一个你要请求的url,这样就ok了,看下面代码。
import requests
r1=requests.post('http://www.nnzhp.cn/login',data={'username':'besttest','password':'123456'})#登陆请求
login_cookies = r1.cookies #获取到登陆请请求返回的cookie,把登陆获取到的cookie,传给发表文章的这个请求,就ok了
r2 = requests.post('http://www.nnzhp.cn/create_user',data={'title':'测试测试','content':'发送文章测试'},cookies=login_cookies)
print(r2.text)
requests模块给咱们提供了更简单的方式,就是使用requests.session这个方法,它会自动帮咱们管理cookie,不需要咱们自己再获取到登陆的cookie,传给创建文件的请求,代码如下:
import requests
r=requests.session()
login_req = r.post('http://www.nnzhp.cn/login',data={'username':'besttest','password':'123456'}) #发送登陆的请求
r1 = r.post('http://www.nnzhp.cn/create_user',
data={'title':'测试测试','content':'发送文章测试'}) #发送创建文件的请求
print(r1.text)#获取返回的结果
http代理设置
我们在写爬虫的时候,如果都用同一个ip访问多次访问某个网站,经常ip会被封,这样我们就访问不了了,那怎么解决呢,就得用ip代理了,代理的意思就是咱们把请求先发到代理上,然后再由代理帮咱们把请求发送出去,这样最终访问网站的ip就不是咱们自己的ip了。网上代理有很多,大多数收费的代理网站上每天都会有几个免费的代理,我先从https://www.kuaidaili.com/free/inha/ 这个里面找了几个免费的代理,设置代理的代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
importrequests
#不带账号密码的代理
posix={
'http':'http://119.187.75.46:9000',#http
'https':'http://112.95.18.133:9000',#https
}
res=requests.get('http://www.nnzhp.cn',proxies=posix).text
print(res)
#带账号密码的代理
posix={
'http':'http://user:password@127.0.0.1:9000',#http
'https':'http://user:password@127.0.0.1:9000',#https
}
res=requests.get('http://www.nnzhp.cn',proxies=posix).text
print(res)
|