我用Pythonpython爬虫Python

Python爬虫学习(九)Requests库初探

2017-09-12  本文已影响462人  弃用中

书接上回,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)
保存到本地

以上。

上一篇下一篇

猜你喜欢

热点阅读