requests库简单的介绍

参考资料requests官方文档崔庆才的博客

requests是基于urllib3的一个用于发起http请求的库。
这个库相较于urllib更快,更易用。

1. 发送请求

1.1 简单的尝试

访问百度,并打印返回值,及返回值的各个参数:

import requests  # 一开始要导入 Requests 模块
response = requests.get('http://www.baidu.com')  # 可以从response中获取我们想要的信息
print(response.content.decode('utf-8'))
print(type(response))
print(response.text)
print(response.cookies)

1.2 发送带参数的GET请求:

# 携带参数的get请求
import requests
data = {
    'name': 'wg',
    'age': 18
}
response = requests.get('http://httpbin.org/get', params=data)
print(response.url)  # http://httpbin.org/get?name=wg&age=18

在发送带参数的GET请求时,requests允许我们使用params关键字参数,以一个字符串字典来提供这些参数。我们打印拼接后的URL,会看到参数已经拼接成功:

print(response.url)
# http://httpbin.org/get?name=wg&age=18

1.3 发送POST请求

# 发送post请求
response = requests.post('http://httpbin.org/post')

1.4 发送更复杂的POST请求

通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:

import requests
data = {
    'key1': 'value1',
    'key2': 'value2'
}
response = requests.post('http://httpbin.org/post', data=data)
print(response.text)

打印结果如下:


post传递数据.png

你还可以为 data 参数传入一个元组列表。在表单中多个元素使用同一 key 的时候,这种方式尤其有效:

import requests
payload = (('key1', 'value1'), ('key1', 'value2'))
response = requests.post('http://httpbin.org/post', data=payload)
print(response.text)

打印结果如下:


多个元素使用同一个Key.png

1.5 发送别的HTTP请求

response = requests.delete('http://httpbin.org/delete')
response = requests.head('http://httpbin.org/get')
response = requests.options('http://httpbin.org/get')

2. 响应内容

Requests会自动解码来自服务器的响应。大多数 unicode 字符集都能被无缝地解码。
请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 response.text之时,Requests 会使用其推测的文本编码。你可以找出 Requests 使用了什么编码,并且能够使用 r.encoding 属性来改变它。

2.1 二进制响应内容

用requests获取一张图片:

import requests
response = requests.get('https://avatars3.githubusercontent.com/u/26769750?s=40&v=4')

打印content:

print(response.content)  # 打印content
打印content.png

打印content的类型:

print(type(response.content))  # 打印content的类型
<class 'bytes'>

把获取到的二进制数据,转换为一张图片:

import requests
response = requests.get('https://avatars3.githubusercontent.com/u/26769750?s=40&v=4')
print(response.content)
print(type(response.content))
with open('githubUserPic', 'wb') as f:
    f.write(response.content)
    f.close()

打开程序所在路径,就会看到一张叫做“githubUserPic”的图片了。

2.2 JSON响应内容

Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据:

import requests
response = requests.get('https://api.github.com/events')
print(response.json())
如果 JSON 解码失败,response.json() 就会抛出一个异常。例如,响应内容是 401 (Unauthorized),尝试访问 response.json() 将会抛出 ValueError: No JSON object could be decoded 异常。

需要注意的是,成功调用 response.json() 并**不**意味着响应的成功。有的服务器会在失败的响应中包含一个 JSON 对象(比如 HTTP 500 的错误细节)。这种 JSON 会被解码返回。要检查请求是否成功,请使用 response.raise_for_status() 或者检查 response.status_code 是否和你的期望相同。

3. 设置请求头

直接请求http://www.zhihu.com/explore,会请求失败,并返回状态码400,表示错误请求服务器无法解析该请求
设置请求头,然后再次访问:

import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',
}
response = requests.get('http://www.zhihu.com/explore', headers=headers)
print(response.text)

就可以看到正常的返回了:


设置请求头之后的返回.png

4. Cookie

如果某个响应中包含一些 cookie,你可以快速访问它们:

import requests
response = requests.get('http://www.baidu.com')
print(response.cookies)

发送cookie到服务器:

import requests
url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
response = requests.get(url, cookies=cookies)
print(response.text)

打印返回值:

{
  "cookies": {
    "cookies_are": "working"
  }
}

以上内容只是简单的整理,详细的内容还请参考requests官方文档

完。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容