【Python】Requests安装和使用(内容出自Requests手册)

【Python】Requests安装和使用(内容出自Requests手册)

 1、Mac下安装requests库:

pip3 install requests

 2、requests库的使用  

  2.1 发送请求

  使用Requests发送网络请求第一步,导入requests模块:

import requests

  尝试获取某个网页。如百度首页:

r = requests.get("http://www.baidu.com")
print(r.text)

  运行结果如下:

/Users/apple/PycharmProjects/untitled1/venv/bin/python /Users/apple/PycharmProjects/untitled1/spider_start/requests_test.py
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write("<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u="+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ "" name="tj_login" class="lb">登录</a>");</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>


Process finished with exit code 0
View Code

  requests不仅支持get,而且还支持post,put,delete等HTTP请求类型。

  例如:你可以这样发送一个HTTP POST请求:

r = requests.post("http://httpbin.org/post", data = {"key":"value"})

  那么其他 HTTP 请求类型:PUT,DELETE,HEAD 以及 OPTIONS 又是如何的呢?都是一样的简单:

>>> r = requests.put("http://httpbin.org/put", data = {"key":"value"})
>>> r = requests.delete("http://httpbin.org/delete")
>>> r = requests.head("http://httpbin.org/get")
>>> r = requests.options("http://httpbin.org/get")

  2.2 传递URL参数

  如果你是手工构建 URL,那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。例如, httpbin.org/get?key=val。 Requests 允许你使用 params 关键字参数,以一个字符串字典来提供这些参数。举例来说,如果你想传递 key1=value1 和 key2=value2 到 httpbin.org/get ,那么你可以使用如下代码:

>>> payload = {"key1": "value1", "key2": "value2"}
>>> r = requests.get("http://httpbin.org/get", params=payload)

  通过打印输出该URL.你能看到URL已被正确编码:

>>> print(r.url)
http://httpbin.org/get?key2=value2&key1=value1

  注意字典里值为 None 的键都不会被添加到 URL 的查询字符串里。

  你还可以将一个列表作为值传入:

>>> payload = {"key1": "value1", "key2": ["value2", "value3"]}

>>> r = requests.get("http://httpbin.org/get", params=payload)
>>> print(r.url)
http://httpbin.org/get?key1=value1&key2=value2&key2=value3

 3、响应内容

  我们能读取服务器响应的内容。以 GitHub 时间线为例:

>>> import requests
>>> r = requests.get("https://api.github.com/events")
>>> r.text
u"[{"repository":{"open_issues":0,"url":"https://github.com/...

  Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。

 4、JSON响应内容

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

>>> import requests

>>> r = requests.get("https://api.github.com/events")
>>> r.json()
[{u"repository": {u"open_issues": 0, u"url": "https://github.com/...

  如果 JSON 解码失败, r.json() 就会抛出一个异常。例如,响应内容是 401 (Unauthorized),尝试访问 r.json() 将会抛出 ValueError: No JSON object could be decoded 异常。

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

  原地址:http://2.python-requests.org/zh_CN/latest/user/quickstart.html#id2