前面在说爬虫原理的时候说了,就写代码自动化的获取数据,保存下来数据,那怎么写代码来请求一个网址,获取结果呢,就得用requests模块了。
这篇博客说一下requests模块的使用,requests模块是python的一个第三方模块,它是基于python自带的urllib模块封装的,用来发送http请求和获取返回的结果,操作很简单。
requests模块是第三方模块,不是python自带的,需要安装才可以使用。
1
|
pip install requests
|
requests模块用法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import requests
req = requests.get('http://www.puuuq.cn',data={'username':'xxx'},cookies={'k':'v'},
headers={'User-Agent':'Chrome'},verify=False,timeout=3) #发送get请求,data是请求数据,
# cookies是要发送的cookies,headers是请求头信息,verify=False是https请求的时候要加上,要不然会报错。
#timeout参数是超时时间,超过几秒钟的话,就不再去请求它了,会返回timeout异常
#这些都可以不写,如果有的话,可以加上
req2 = requests.post('http://www.puuuq.cn',data={'username':'xxx'},cookies={'k':'v'},
headers={'User-Agent':'Chrome'},files={'file':open('a.txt')},timeout=3) #发送post请求,data是请求数据,
# cookies是要发送的cookies,headers是请求头信息,files是发送的文件,verify=False是https请求的时候要加上,
# 要不然会报错,timeout参数是超时时间,超过几秒钟的话,就不再去请求它了,会返回timeout异常
#这些都可以不写,如果有的话,可以加上
req3 = requests.put('http://www.puuuq.cn') #put方式请求
req4 = requests.patch('http://www.puuuq.cn')#patch方式请求
req5 = requests.delete('http://www.puuuq.cn')#delete方式请求
req6 = requests.options('http://www.puuuq.cn')#options方式请求,用法和上面的get、post都一样
print(req.status_code) #获取返回状态码
print(req.content)#获取返回的内容,二进制格式,一般下载图片、视频用这个
print(req.text) #获取返回的内容,字符串格式
print(req.json())#获取返回的内容,json格式,这个必须是返回的是json才可以使用,否则会报错
print(req.headers)#获取响应头
print(req.cookies)#获取返回的cookie
print(req.encoding)#获取返回的字符集
|
http权限认证
有一些网站,比如说下载东西的时候有http的权限验证,没有验证话就返回401 请求未经授权这种错误的。一般都是需要http权限验证,下面是怎么添加http权限验证。
当然这个http权限认证是http本身的,和你那些登陆请求那些不一样,比如说你要调一个登陆接口,传入的账号密码,和那个不是一回事,要区别开。
举个例子呢就是商场的大门上的锁就是这个http权限验证,这个锁是人家商场的,而你的店铺的锁才是你登陆接口,你输入的账号密码。一般你一打开一个网站直接弹出来一个窗口让你输入账号密码,你都看不到页面,这种就是http权限验证。而那种你打开网站之后,直接就能看到页面,你要登录的时候,输入账号密码然后点登录的,这种的就是正常的登陆请求。这种http权限验证的比较少见。
1
2
3
4
5
6
7
8
9
10
11
|
import requests
from requests.auth import HTTPBasicAuth
#导入HTTPBasicAuth
req = requests.post('http://www.puuuq.cn',data={'username':'xxx'},auth=HTTPBasicAuth('username','password'))
#使用的时候加上auth参数,然后使用HTTPBasicAuth,传入账号和密码即可。其他的都是和以前一样用
print(req.status_code)
|
http会话保持
什么是会话保持,就是有一些操作需要登录之后才操作的,你得先登录,然后才能做其他的操作。那咱们做的时候怎么做,先发送登陆的请求,获取到登录的cookie信息,(因为登录之后它的身份验证信息都是放在cookie里面的),然后把cookie传给下一个你要请求的url,这样就ok了,看下面代码。
1
2
3
4
5
6
7
8
|
import requests
r1=requests.post('http://www.puuuq.cn/login',data={'username':'besttest','password':'123456'})#登陆请求
login_cookies = r1.cookies #获取到登陆请请求返回的cookie
r2 = requests.post('http://www.puuuq/create_user',
data={'title':'测试测试','content':'发送文章测试'},
cookies=login_cookies)
#把登陆获取到的cookie,传给发表文章的这个请求,就ok了
print(r2.text)
|
正常的话咱们要这么做,requests模块给咱们提供了更简单的方式,就是使用requests.session这个方法,它会自动帮咱们管理cookie,不需要咱们自己再获取到登陆的cookie,传给创建文件的请求,代码如下:
1
2
3
4
5
6
7
8
|
import requests
r=requests.session()
login_req = r.post('http://www.puuuq.cn/login',data={'username':'besttest','password':'123456'}) #发送登陆的请求
r1 = r.post('http://www.puuuq.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
|
import requests
#不带账号密码的代理
posix = {
'http':'http://119.187.75.46:9000', #http
'https':'http://112.95.18.133:9000',#https
}
res = requests.get('http://www.puuuq.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.puuuq.cn',proxies=posix).text
print(res)
|