Python爬虫学习(九)Requests库初探
书接上回,Python爬虫学习之小结(一)。
第一次看到这条警告的时候,我简直醉了!
赞叹之余,果断介绍一波!
安装
打开终端,输入pip install requests
即可。
发送请求
要发送请求,自然就要先导入Requests模块啦,
import requests
然后就是获取某个网页,比如爱测试使用的百度,
得到了一个Response对象,状态码是200,意味着我们成功获取到了网页内容。
自然,还有许多其他的HTTP请求类型,比如:
r = requests.put("http://httpbin.org/put")
r = requests.delete("http://httpbin.org/delete")
r = requests.head("http://httpbin.org/get")
r = requests.options("http://httpbin.org/get")
简单吧!
响应内容
Response对象里面有啥呢?——很多东西!
比如,网页编码:
网页内容:
什么鬼?怎么连个百度的中文字都没有?唉,又得解码!
不用!把encoding
属性改一下就好!
状态码、Cookies:
如果发送了一个错误请求(一个 4XX 客户端错误,或者 5XX 服务器错误响应),我们可以通过Response.raise_for_status()来抛出异常。
定制请求头
还记得使用urllib时我们定制请求头吗?
注意: 定制 header 的优先级低于某些特定的信息源,例如:
如果在 .netrc 中设置了用户认证信息,使用 headers= 设置的授权就不会生效。而如果设置了 auth= 参数,
.netrc
的设置就无效了。
如果被重定向到别的主机,授权 header 就会被删除。
代理授权 header 会被 URL 中提供的代理身份覆盖掉。
在我们能判断内容长度的情况下,header 的 Content-Length 会被改写。
更进一步讲,Requests 不会基于定制 header 的具体情况改变自己的行为。只不过在最后的请求中,所有的 header 信息都会被传递进去。
注意: 所有的 header 值必须是 string、bytestring 或者 unicode。尽管传递 unicode header 也是允许的,但不建议这样做。
传递 URL 参数
比如,我们想传递:
它会自动加到URL后面。
获取二进制数据
现在我们可以轻松获取到一个网页,但如果是图片、视频怎么办呢?它们可都是典型的二进制数据呢!
依旧无压力,赶紧演示一下。比如,要抓取这张图:
如何获得呢?
小菜一碟!自然,我们可以将其保存到本地:
with open('favicon.ico','wb') as f:
f.write(response.content)
保存到本地
以上。