requests 官方文档:

http://cn.python-requests.org/zh_CN/latest/user/quickstart.html

request 是一个第三方的HTTP库

1.发起请求

发起GET请求非常简单,直接使用requests的get方法即可。比方说下面的代码获取百度首页的信息。

 import requests

 baidu_url = 'https://www.baidu.com'

 response = requests.get(baidu_url)
print(response.content.decode())
如果要在URL上附加参数,也非常简单,使用params参数传入字典即可。参数会自动附加到URL上,列表参数也会正确的附加。这里这个网站是一个HTTP调试网站,值得收藏。如果我们访问这个网站,它会将浏览器发送的请求头,用户代理、表单参数等信息以格式化JSON形式返回,对HTTP调试非常有帮助。
 #基本Get请求
r = requests.get('http://httpbin.org/get')
#如果要加参数,可以利用params参数
payload = {'key1':'values','key2':'valus'}
r = requests.get('http://httpbin.org/get',params=payload)
print r.url

其他常用的HTTP操作例如PUT、DELETE、HEAD、OPTIONS等也支持,调用相应方法即可。

获取结果

发起请求之后,返回值是一个Response对象,利用它我们可以方便的获取结果。

响应对象的常用属性和方法如下。

属性名 结果
text HTTP字符
encoding 响应编码,这个值可以改变,改变之后text属性也会根据编码而变化
content 未编码的二进制数据
json() 返回JSON数据
raw 结果的原始字节流
url 请求的URL
status_code 状态码
headers 请求头字典
cookies cookies字典
history 如果发生重定向,所有请求对象都会保存到这里
r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
#*特殊方法*#
r.json() #Requests中内置的JSON解码器
r.raise_for_status() #失败请求(非200响应)抛出异常

自定义header

如果要在请求上添加请求头,也非常简单。有些网站对客户端的限制比较严格,所以我们必须伪装header。

 #如果想添加headers 可以传入headers参数
2 headers = {'content-type':'application/jason'}
3 r = requests.get('http://httpbin.org/get',headers = headers)
4 print r.url

假如使用自带的urllib标准库,那么代码就比较复杂了。从这里我们可以看到requests确实非常方便。

headers = {'content-type':'application/jason'}
r = urllib2.request(url,headers = headers)
response = urllib2.urlopen(r)
print response.read().decode()

POST数据

如果我们要发送复杂的表单,就需要POST数据了。和GET传送数据一样,想方法中额外添加一个data参数的事儿。这种方式相当于你在表单中填写这些数据,然后点击表单的提交。

data = {
'name': 'yitian',
'age': 22,
'friends': ['zhang3', 'li4']
}
response = requests.post(f'{base_url}post', data=data)
print(response.text)

有时候POST数据不是使用表单方式,而是直接在请求体中附加参数。那么我们在发送参数的时候不能向data参数添加字典了,而应该传递字符串。

import json

data = {
'name': 'yitian',
'age': 22,
'friends': ['zhang3', 'li4']
}
response = requests.post(f'{base_url}post', data=json.dumps(data))
print(response.text)

备注: json的几个常用方法 json.load(), json.dump() ,json.loads(), json.dumps()

json.loads() : 将json结构转变成Python数据结构

json.dumps():将Python数据结构转变成json结构

json.load(): 读取json文件转成Python数据结构

json.dumps():写入jason文件

参考自: https://python3-cookbook.readthedocs.io/zh_CN/latest/c06/p02_read-write_json_data.html

有些程序(例如Github的API)需要将JSON字符串直接当做请求体发送,比如说上面这种将字典转换为JSON的例子。在这种情况下,我们可以直接将字典的引用传递给方法的json参数,这样就不需要我们手动转换,requests会自动转换。

response = requests.post(f'{base_url}post', json=data)

上传文件

在网页上,上传头像等操作都需要上传multipart/form-data类型的表单。使用requests也非常简单。需要注意打开文件的时候最好使用二进制模式,使用文本模式打开文件可能导致requests不能正确计算文件的大小。

file = open(r'c:\Windows\System32\drivers\etc\hosts', mode='rb')

data = {
'file': file
} response = requests.post(f'{base_url}post', files=data)
print(response.text)
#requests 支持流失上传的,允许发送大的数据流或文件而无需先把他读入内存。需使用流式上传
with open('massive-body') as f:
requests.post('http://some.url/streamed',data=f)

cookies

如果要获取响应的cookies,调用cookies属性即可,它会返回一个RequestsCookieJar对象,它实现了标准库的http.cookiejar。所以我们可以按照cookiejar的方法来使用RequestsCookieJar。比如说访问百度的时候,它会分配一个cookie,所以我们可以使用下面的代码获取Cookie。

response = requests.get(baidu_url)
print(response.cookies)

如果要在发送数据的时候向服务器传递cookie,需要实例化一个RequestsCookieJar,然后传递给发送方法的cookies参数。

import requests.cookies

cookies = requests.cookies.RequestsCookieJar()
cookies.set('name', 'yitian')
response = requests.get(f'{base_url}cookies', cookies=cookies)
print(response.text)

以上就是requests的快速入门。具体的高级应用可以参考官方文档。

9.Python爬虫利器一之Requests库的用法(一)的更多相关文章

  1. (转)Python爬虫利器一之Requests库的用法

    官方文档 以下内容大多来自于官方文档,本文进行了一些修改和总结.要了解更多可以参考 官方文档 安装 利用 pip 安装 $ pip install requests 或者利用 easy_install ...

  2. Python爬虫利器一之Requests库的用法

    前言 之前我们用了 urllib 库,这个作为入门的工具还是不错的,对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助.入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取.那么这一节来 ...

  3. python爬虫(6)--Requests库的用法

    1.安装 利用pip来安装reques库,进入pip的下载位置,打开cmd,默认地址为 C:\Python27\Scripts 可以看到文件中有pip.exe,直接在上面输入cmd回车,进入命令行界面 ...

  4. Python爬虫利器二之Beautiful Soup的用法

    上一节我们介绍了正则表达式,它的内容其实还是蛮多的,如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,而且有的小伙伴们也对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Be ...

  5. python爬虫入门三:requests库

    urllib库在很多时候都比较繁琐,比如处理Cookies.因此,我们选择学习另一个更为简单易用的HTTP库:Requests. requests官方文档 1. 什么是Requests Request ...

  6. python爬虫(八) requests库之 get请求

    requests库比urllib库更加方便,包含了很多功能. 1.在使用之前需要先安装pip,在pycharm中打开: 写入pip install requests命令,即可下载 在github中有关 ...

  7. Python爬虫学习笔记-2.Requests库

    Requests是Python的一个优雅而简单的HTTP库,它比Pyhton内置的urllib库,更加强大. 0X01 基本使用 安装 Requests,只要在你的终端中运行这个简单命令即可: pip ...

  8. python爬虫(九) requests库之post请求

    1.方法: response=requests.post("https://www.baidu.com/s",data=data) 2.拉勾网职位信息获取 因为拉勾网设置了反爬虫机 ...

  9. python爬虫学习,使用requests库来实现模拟登录4399小游戏网站。

    1.首先分析请求,打开4399网站. 右键检查元素或者F12打开开发者工具.然后找到network选项, 这里最好勾选perserve log 选项,用来保存请求日志.这时我们来先用我们的账号密码登陆 ...

随机推荐

  1. 20171205xlVBA往返航班组合

    'ClassPlan Public Org As String Public Des As String Public FlyNo As String Public StartDate As Vari ...

  2. android------DDMS files not found: tools\hprof-conv.exe

    好久没有Eclipse了,使用一下就遇到坑,使用eclipse突然发生这个问题:DDMS files not found: ***\sdk\tools\hprof-conv.exe,无法连接模拟器 在 ...

  3. CRM系统之stark组件流程分析

    CRM系统主要通过自定义stark组件来实现的(参照admin系统自定义): STARK组件: 1 admin组件 1 如何使用admin 2 admin源码 3 创建自己的admin组件:stark ...

  4. Tanya and Password CodeForces - 508D (欧拉回路)

    大意:给定n个长为3的子串, 求一个长为n+2的字符串包含所有子串. 相邻两个字符开一个节点, 建图跑欧拉回路, 若存在的话长度一定是$\le n+2$.

  5. Thymeleaf使用bootstrap及其bootstrap相关插件(一)

    Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. 在完成信息录入界面 ...

  6. 如何使a标签打开新页面并阻止刷新当前页面

    错误: HTML中,使用href属性时,当前页面和新页面均跳转到URL指定的页面,即当前页面也刷新: <li id='goToBack'><a href='**.action' ta ...

  7. Javascript 将 HTML 页面生成 PDF 并下载

    最近碰到个需求,需要把当前页面生成 pdf,并下载.弄了几天,自己整理整理,记录下来,我觉得应该会有人需要 :) html2canvas 简介 我们可以直接在浏览器端使用html2canvas,对整个 ...

  8. 五、持久层框架(Hibernate)

    一.分页查询 使用Criteria进行分页查询,无论是使用Oracle,MySQL,NoSQL,DB2,分页查询的代码写法都相同. 分页查询代码示例: package com.demo.test; i ...

  9. Linux NTP服务配置 for Oracle RAC

    安装Oracle 11g RAC时,我们需要配置ntp服务.在使用虚拟机的情况下对于时钟同步方式的配置有很多种方式,可以使用vmware自带的时钟同步功能,也可以直接将本地的一个节点用作时间服务器.本 ...

  10. 前端基础之CSS的引入+HTML标签选择器+CSS操作属性

    clear:left/ringt属性 CSS:语法形式上由选择器+以及一条或多条声明组成:选择器查找到指定的html标签后,使用css属性设置html标签的样式:                   ...