• 【21天python打卡】第12天 网络爬虫(3)


    ​​大家好,今天是21天python打卡的第12天,上一篇讲了python正则表达式,今天来讲讲requests的用法。


     

    活动地址:CSDN21天学习挑战赛

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。


    目录

    Python requests 模块是什么

    怎么用

    请求参数以及请求方法

    响应对象的属性与方法

    会话对象

    SSL 证书验证,客户端证书,CA 证书

    代理

    Cookie


    Python requests 模块是什么

    Python 爬虫或网络请求时,最先接触的第三方库就是 requests,该库开源地址为:https://github.com/psf/requests
    官方的 solgan 为 Requests is a simple, yet elegant, HTTP library

    我们在日常编码的过程中,经常执行的一个操作就是查询手册,
    requests 库提供了中文手册 - https://docs.python-requests.org/zh_CN/latest/,因此大幅度降低了学习的难度。

    不过中文翻译夹带了不少翻译者的情绪化文字,阅读的时候忽略即可。

    怎么用

    请求参数以及请求方法

    导入 requests 库之后,你首先学习到的就是 requests.get() 方法,下面首先从 get 方法的参数开始学习,
    下述内容在官方手册没有呈现清单,学习的时候可以直接查阅 requests 模块最新版的源码。

    除 url 参数外,其余都为可选参数,即非必选。

    • url:请求地址;
    • params:要发送的查询字符串,可以为字典,列表,元组,字节;
    • data:body 对象中要传递的参数,可以为字段,列表,元组,字节或者文件对象
    • json:JSON 序列化对象;
    • headers:请求头,字典格式;
    • cookies:传递 cookie,字段或 CookieJar 类型;
    • files:最复杂的一个参数,一般出现在 POST 请求中,格式举例 "name":文件对象 或者 {'name':文件对象},还可以在一个请求中发送多个文件,不过一般爬虫场景不会用到;
    • auth:指定身份验证机制;
    • timeout:服务器等待响应时间,在源码中检索到可以为元组类型,这个之前没有使用过,即 (connect timeout, read timeout)
    • allow_redirects:是否允许重定向;
    • proxies:代理;
    • verify:SSL 验证;
    • stream:流式请求,主要对接流式 API;
    • cert:证书。

    以上内容就是 GET 请求中可以配置的参数,除了 GET 请求外,requests 还内置了其他的服务器请求方式,
    这些方法需要的参数与上述清单一致。

    GETOPTIONSHEADPOSTPUTPATCHDELETE

    在 Python 爬虫的实战当中,主要以 GET 与 POST 为主,
    常用的参数为:urlparamsdataheaderscookiestimeoutproxiesverify

    响应对象的属性与方法

    使用 requests 库请求之后,会得到一个 Response 对象,掌握该对象的技巧就是了解其属性与方法,
    通过 dir() 函数可以获取 Response 对象的属性和方法。

    1. help(res)
    2. print(dir(res))

    获取到的内容如下所示,其中有我们之前案例中常见的一些内容。

    ['__attrs__', '__bool__', '__class__', '__delattr__', '__dict__', '__dir__', '其余内容自行查询']
    

    如果只将 requests 库应用在爬虫采集领域,那上述属性与方法中,比较常用的有:

    属性 property

    • ok:只要状态码 status_code 小于 400,都会返回 True;
    • is_redirect:重定向属性;
    • content:响应内容,字节类型;
    • text:响应内容,Unicode 类型;
    • status_code:响应状态码;
    • url:响应的最终 URL 位置;
    • encoding:当访问 r.text 时的编码;

    方法

    • json():将响应结果序列化为 JSON;

    会话对象

    在本专栏前面的文章中,存在一个被忽略的 requests 高级特性,即会话对象,
    该对象能够在跨域请求的时候,保持住某些参数,尤其是 cookie,如果你想向同一主机发送多个请求,
    使用会话对象可以将底层的 TCP 连接进行重用,从而带来显著的性能提升。

    会话对象使用非常简单,在发起 requests 对象之前,增加如下所示代码即可。

    1. # 建立会话对象
    2. s = requests.Session()
    3. # 后续都使用会话对象进行进行,而不是直接使用 requests 对象
    4. s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
    5. r = s.get("http://httpbin.org/cookies")
    6. print(r.text)

    由于专栏前面并未涉及相关案例,故直接引入官方手册案例说明。

    下述代码演示的是 会话也可用来为请求方法提供缺省数据,顾名思义就是直接给会话对象增加的请求参数,
    在后续代码中默认可用。

    1. import requests
    2. s = requests.Session()
    3. s.auth = ('user', 'pass')
    4. s.headers.update({'x-test': 'true'})
    5. # both 'x-test' and 'x-test2' are sent
    6. r = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
    7. print(r.text)

    接下来官网案例还展示了 方法级别的参数也不会被跨请求保持,即在 s.get() 方法中如果传递了 cookie,那不会被保持住,
    这两个案例,从正面与反面为我们核心展示的就是,如何使用会话对象保持参数,
    通过会话对象的属性设置的参数,能被保持,而通过会话对象方法传递的参数,不能被保持。

    SSL 证书验证,客户端证书,CA 证书

    在爬虫采集数据的过程中,碰到 https 的网站在正常不过,requests 库使用过程中 SSL 验证是默认开启的,
    如果证书验证失败,即抛出 SSLError错误。

    不过在实战的时候,我们可以通过设置 verify = False ,忽略对 SSL 证书的验证。
    部分场景无法忽略证书,必须增加相关证书逻辑。

    代理

    有的网站在采集过程中,会针对 IP 进行限制,此时就需要使用代理进行跳过操作,设置 proxies 参数即可,
    本部分内容比较简单,后续很多案例还会复用到。

    除了 HTTP 代理外, requests 2.10 版本之后,增加了 SOCKS 代理,如果你需要使用,需要通过 pip 安装相应库。

    pip install requests[socks]
    

    安装完毕,出现新的第三方库 PySocks,使用方式与 HTTP 代理一致。

    爬虫采集过程会大量的与 cookie 打交道,获取网站响应的 cookie,使用 response 对象的 cookies 属性即可。
    如果希望向服务器传递 cookie,可以通过 cookies 参数,例如下述代码:

    1. url = 'http://httpbin.org/cookies'
    2. cookies = dict(cookies_are='working')
    3. r = requests.get(url, cookies=cookies)

    如果你希望对 cookie 有更加细致的操作,重点研究 requests.cookies.RequestsCookieJar 对象即可,
    简单的代码使用如下所示:

    1. jar = requests.cookies.RequestsCookieJar()
    2. jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
    3. jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
    4. url = 'http://httpbin.org/cookies'
    5. r = requests.get(url, cookies=jar)
    6. print(r.text)

    RequestsCookieJar 对象具备更加丰富的接口,适合跨域名跨路径使用,相关接口可在 https://docs.python-requests.org/zh_CN/latest/api.html#requests.cookies.RequestsCookieJar 查询。


    今天就介绍到这里,下一篇我们继续介绍关于requests-html 的用法。

  • 相关阅读:
    腾讯云HAI域AI作画
    P1164 小A点菜
    基于单片机的空气质量检测系统
    第37章_瑞萨MCU零基础入门系列教程之DAC数模转换模块
    使用mybatisplus查询sql时,报Error attempting to get column ‘ID‘ from result set错误
    (迪杰斯特拉)Dijkstra算法 单源最短路径算法 图解
    【雷达通信】雷达探测项目仿真(Matlab代码实现)
    k-form-design 改成自己组件步骤
    Spring Cloud服务发现与注册的原理与实现
    fetch前后端通信
  • 原文地址:https://blog.csdn.net/BROKEN__Y/article/details/126354399