目录:
1. 3 .1.1 发送请求
2. 3 .1.2 传递URL参数3. 3 .1.3 响应内容
4. 3 .1.4 JSON响应内容5. 3 .1.5 定制请求头
6. 3 .1.6 响应状态码
7. 3 .1.7 响应头
8. 3 .1.8 Cookie
9. 3 .1.9 错误与异常
所有操作都必须先导入requests模块:
广告建筑施工图纸怎么看?一文教会你识图!×3.1.1 发送请求
发送get请求
广告python爬虫学习-人工智能大数据统计分析×requests.get方法会返回一个Response的对象r,就是网站的响应,我们想要获取的数据就包含在这个对象中
发送post请求
post方法会返回一个Response的对象r,就是网站的响应,我们想要获取的数据就包含在这个对象中
广告零基础轻松入门-掌握人工智能Python编程×其它方法的请求
其它方法的请求格式也相同
广告python爬虫,达内0基础入学,120天变身Python人...×3.1.2 传递URL参数
在get请求中传递参数
基本格式
广告一份python爬虫电子书×在post请求中传递参数
基本格式
广告电脑基础入门及更基本的操作第一章×get方法的传递数据的参数为params,post方法传递数据的参数为data
3.1.3 响应内容
以再次以 GitHub 时间线为例,r.text就是以文本方式读取响应正文
广告复古热血正版传奇,高爆技能书100%靠合成!立即回收上万!×还可以获取响应正文的编码,并改变其编码
广告女领导夜里喝醉误将小偷当丈夫,早上醒来才发现不对,瞬间崩溃×还可以用r.content,以二进制方式读取响应正文
r.text 存的是r.content 编码后的字符串
r.content中间存的是字节码
一般来说r.text直接用比较方便,返回的是字符串,但是有时候会解析不正常,导致返回的是一堆乱码。这时需要用r.content.decode(‘utf-8’),使其正常显示。
总的来说.text是现成的字符串,.content还要编码,但是.text不是所有时候显示都正常(需要 用.content.decode()进行手动编码)
3.1.4 JSON响应内容
当返回的响应正文是一个JSON数据,可以使用Requests内置的JSON解码器进行处理
广告前列腺“克星”就是它!每天一用,排尿舒畅,好轻松×如果 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 是否和你的期望相同
3.1.5 定制请求头
想为请求添加 HTTP 头部,只要简单地传递一个 dict 给 headers 参数就可以了。例如,在前一个示例中我们没有指定 content-type
广告震惊!膝关节疼痛肿胀有积液,别发愁了!医生教你一招解决!×注意: 定制 header 的优先级低于某些特定的信息源,例如:
如果在 .netrc 中设置了用户认证信息,使用 headers= 设置的授权就不会生效。而如果设置了
auth= 参数, .netrc 的设置就无效了。
如果被重定向到别的主机,授权 header 就会被删除。代理授权 header 会被 URL 中提供的代理身份覆盖掉。
在我们能判断内容长度的情况下,header 的 Content-Length 会被改写。
更进一步讲,Requests 不会基于定制header 的具体情况改变自己的行为。只不过在最后的请求中,所有的 header 信息都会被传递进去
注意: 所有的 header 值必须是 string、bytestring 或者 unicode。尽管传递 unicode header 也是允许的,但不建议这样做
3.1.6 响应状态码
可以通过r.status_code来获取响应状态码
广告别再玩假传奇了!这款传奇爆率9.8,你找到充值入口算我输!×Requests还附带了一个内置的状态码查询对象
广告研究生穿越唐朝考科举睡着,皇帝震怒,就这?也太简单了!×如果发送了一个错误请求(一个 4XX 客户端错误,或者 5XX 服务器错误响应),我们可以通过
Response.raise_for_status() 来抛出异常
广告成都村民祖坟冒青烟,专家赶到后立刻让封锁,背后原因×3.1.7 响应头
一个 Python 字典形式展示的服务器响应头
广告复古热血正版传奇,高爆技能书100%靠合成!立即回收上万!×我们可以使用任意大写形式来访问这些响应头字段
广告女领导夜里喝醉误将小偷当丈夫,早上醒来才发现不对,瞬间崩溃×还有一个特殊点,那就是服务器可以多次接受同一 header,每次都使用不同的值。Requests
会将它们合并,这样它们就可以用一个映射来表示出来,参见 RFC 7230:
A recipient MAY combine multiple header fields with the same field name into one field- name: field-value pair, without
changing the semantics of the message, by appending each subsequent field value to the combined field value in order, separated by a comma.
3.1.8 Cookie
什么是cookie
Cookie 是一些数据, 存储于你电脑上的文本文件中。
当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。
Cookie 的作用就是用于解决 如何记录客户端的用户信息:
● 当用户访问 web 页面时,他的名字可以记录在 cookie 中。
●在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。
Cookie 以名/值对形式存储,如下所示:
广告震惊!膝关节疼痛肿胀有积液,别发愁了!医生教你一招解决!×获取响应的cookie
在requests模块中,cookie是以字典的形式存储通过r.cookies[变量名]可以访问cookie中的变量值
广告别再玩假传奇了!这款传奇爆率9.8,你找到充值入口算我输!×可以对cookie进行遍历
广告成都村民祖坟冒青烟,专家赶到后立刻让封锁,背后原因×发送cookie到服务器
要想发送你的cookies到服务器,可以使用 cookies 参数
广告研究生穿越唐朝考科举睡着,皇帝震怒,就这?也太简单了!×Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests
3.1.9 错误与异常
遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError 异常。若请求超时,则抛出一个 Timeout 异常。
若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。所有Requests显式抛出的异常都继承自 requests.exceptions.
RequestException 。