Requests是一个用Python语言编写的基于urllib3的网络请求库,它比urllib3使用更加方便,在做网络请求中,时常使用到它。
安装
输入下方的语句就可以进行自动安装了
pip3 install requests
GET请求
请求页面
response = requests.get('http://www.baidu.com')
print(response.status_code)
print(response.text)
只需要上面两调语句,就可以获取到百度搜索的页面信息并打印出来了。
response是一个Response类型的对象,其中包含了所有的请求结果
response.status_code
为请求状态码,显示200则表示请求成功。
response.text
为请求结果的文本信息。
文件下载
requests也可以用来下载,并且操作起来也很简单,只需要4行代码就可以下载一张图片了。
response = requests.get('https://github.com/favicon.ico')
with open('favicon.ico', 'wb') as f:
f.write(response.content) # 二进制文件
f.close()
response.content
表示结果的二进制数据,可用来下载图片、音频、视频等文件。
POST请求
文件上传
requests也可用来上传文件,这里可以使用一个测试网站来进行测试。
files = {'file': open('favicon.ico', 'rb')} # 将文件读取为二进制数据
response = requests.post('http://httpbin.org/post', files=files)
print(response.text)
上传成功后网站会返回一个json格式的字符串,从中可以看出图片经过了转码后才进行上传。
获取Cookie
在做爬虫时,经常会碰到需要登入的情况,而cookie就可以用来模拟登录,一般的登入信息都会存放在cookie中。
response = requests.get('https://www.baidu.com')
print(response.cookies)
for key, value in response.cookies.items():
print(key + '=' + value)
这样我们就可以获取访问百度时的cookie。一般使用浏览器打开某个网站并登陆后,我们可以使用浏览器带的审查工具获取登录后的cookie,并且可以利用这个cookie来进行模拟用户登录。
模拟登录
使用含有登录信息的cookie来进行网站的模拟登录,可以使用测试网站来进行测试。
s = requests.Session()
# 先设置一个cookie信息,模拟已登录的账号
s.get('http://httpbin.org/cookies/set/number/123456')
response = s.get('http://httpbin.org/cookies')
print(response.text)
执行代码,可以看到返回的信息为:
{
"cookies": {
"number": "123456"
}
}
从结果我们可以看出目前登录的信息。
证书验证
https协议的网址在访问时浏览器都会验证证书,如果证书异常浏览器会进行提示,典型的网站就是12306购票网了。
response = requests.get('https://www.12306.cn')
print(response.status_code)
执行上方代码时,会抛出requests.exceptions.SSLError
异常,提示证书验证失败。但是我们知道12306这个网站是正规的,所以通常在使用浏览器访问12306时都会点击继续访问,而requests可以选择关闭证书认证。改写上方代码:
response = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)
这个时候,再次执行代码,可以看到状态码是正常返回了200,但是还有一个警告信息 InsecureRequestWarning
提示https访问没有验证证书,强烈建议添加证书验证。这个警告也是可以关闭的,因为requests是基于urllib3这个库的,所以需要引入一下这个库,然后在进行https链接请求前加上 urllib3.disable_warnings()
即可。再次执行上面的代码,会发现这次只会打印200请求码了。
requests在请求https网址时,不仅可以关闭证书验证,还可以自己指定一个证书:
response = requests.get('https://www.12306.cn', cert=('/path/server.crt', '/path/key'))
print(response.status_code)
代理设置
某些网站有反爬取措施,当我们在某个时间段访问量过多的时候会进行封IP处理,这个时候就需要用代理来完成请求了。
proxies = {
# 协议: 代理地址:端口号
'http': 'http://127.0.0.1:9743',
'https': 'https://127.0.0.1:9743',
# 需要账户密码的代理只需将信息填写在地址前方即可
'http': 'http://user:password@127.0.0.1:9743'
}
response = requests.get('http://httpbin.org', proxies=proxies)
print(response.status_code)
认证设置
有一些网站在登录时需要进行认证,requests也可以进行此操作,并且有两种方式。
# 1. 导入HTTPBasicAuth类
response = requests.get('http://httpbin.org', auth=HTTPBasicAuth('user', '123'))
# 2. 不导入类
response = requests.get('http://httpbin.org', auth=('user', '123'))
print(response.status_code
异常处理
在网络请求中会存在各种问题,接下来看看requests库的异常处理
try:
response = requests.get('http://httpbin.org/get', timeout=0.2)
print(response.status_code)
except ReadTimeout: # 连接超时异常
print('Timeout')
except HTTPError: # http链接异常
print('Http error')
except ConnectionError: # 连接异常(dns域名解析失败,请求拒绝等)
print('Connection Error')
except RequestException: # 请求异常
print('Error')
RequestException
是其他异常的父类
网友评论