美文网首页
Python笔记 - Requests

Python笔记 - Requests

作者: Jansid | 来源:发表于2017-11-24 16:22 被阅读14次

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是其他异常的父类

相关文章

网友评论

      本文标题:Python笔记 - Requests

      本文链接:https://www.haomeiwen.com/subject/ucwtbxtx.html