美文网首页我用Pythonpython爬虫Python
Python爬虫学习(九)Requests库初探

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

作者: 弃用中 | 来源:发表于2017-09-12 00:21 被阅读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)
    
    保存到本地

    以上。

    相关文章

      网友评论

        本文标题:Python爬虫学习(九)Requests库初探

        本文链接:https://www.haomeiwen.com/subject/bejqsxtx.html