美文网首页
Requests 库入门

Requests 库入门

作者: 汪小鱼 | 来源:发表于2021-10-05 07:35 被阅读0次

    1 Requests 库的安装

    Win 平台:“以管理员身份运行” cmd,执行 pip install requests,等待安装

    Requests 库的安装小测

    Python IDLE

    2 Requests 库的 get() 方法

    get 方法

    response n. 响应;反应;回答
    Response 对象包含服务器返回的所有信息,也包含请求的 Request 信息

    r = requests.get( url , params=None , **kwargs )
    //---url:拟获取页面的 url 链接
    //---params:url 中的额外参数,字典或字节流格式,可选
    //---**kwargs:12 个控制访问的参数
    

    [补充]:参考 get 方法的文档可以看出 get 方法使用了 request 方法进行封装,也就是说 request 库一共提供 7 常用方法,除了第一个 request 方法外,其它的 6 个方法都是通过调用 request 方法实现的。其实也可以这样认为 requests 库其实只有一个方法,就是 request 方法,但是为了让大家编写程序更方便,提供了额外 6 个方法。

    Requests 库的 2 个重要对象

    Response 对象

    Response 对象的属性

    属性 说明
    r.status_code HTTP请求的返回状态, 200表示连接成功, 404表示失败
    r.text HTTP响应内容的字符串形式,即, url对应的页面内容
    r.encoding 从HTTP header中猜测的响应内容编码方式
    r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)
    r.content HTTP响应内容的二进制形式

    !r.status_code:只要不是200其实都是连接失败的

    在使用 get 方法获取网上资源的基本流程:

    理解 Response 的编码:

    • r.encoding:编码方式是从 http 的 heder 中的 charset 字段获得的,如果 header 中不存在 charset,则默认认为编码为 ISO-8859-1,这样的编码不能解析中文。r.text 根据 r.encoding 显示网页内容
    • r.apparent_encoding:根据 http 的内容部分,而不是头部分,去分析内容中出现文本可能的编码形式。即根据网页内容分析出的编码方式, 可以看作是 r.encoding 的备选

    为什么将 r.apparent_encoding 解析出来的编码方式赋给 r.encoding 后,网页中的中文就可以分析出来,难道 r.text 是以 r.encoding 的方式进行编码的吗?为什么头部分析出来的编码方式会与内容解析出来的不同?
    答:r.text 是以 r.encoding 的方式进行编码

    3 爬取网页的通用代码框架

    在介绍爬取网页的通用代码框架之前,我们需要理解 Requests 库的异常

    r.raise_for_status():在方法内部判断 r.status_code 是否等于 200,不需要增加额外的 if 语句,该语句便于利用 try-except 进行异常处理,如果状态码不是200,产生异常 requests.HTTPError。

    import requests
    def getHTMLText(url):
        try:
            r = requests.get(url)
            r.raise_for_status()
            r.encoding = r.apparent_encoding
            return r.text
        except:
            # print(r.status_code)
            return "产生异常!"
    if __name__=="__main__":
        url = "http://www.baidu.com"
        print(getHTMLText(url))
    

    4 HTTP 协议及 Requests 库方法

    HTTP,HyperText Transfer Protocol,超文本传输协议。是一个基于 “请求与响应” 模式的、无状态的应用层协议。无状态指的是第一次请求与第二次请求之间并没有相关的关联。HTTP 协议采用 URL 作为定位网络资源的标识。

    URL 格式如下:http://host[:port][path]
           host:合法的 Internet 主机域名或 IP 地址
           port:端口号,缺省端口为 80
           path:请求资源的路径
    HTTP 实例:http://www.bit.edu.cn
          http://220,181,111,188/duty

    URL 是通过 HTTP 协议存取资源的 Internet 路径,它就像我们电脑里边的一个文件的路径一样,只不过这个文件不在电脑里,在 internet 上,那每一个 URL,对应了 internet 上的一个数据资源。

    HTTP 协议对资源的操作

    理解 PATCH 和 PUT 的区别
    假设 URL 位置有一组数据 UserInfo,包括 UserID、UserName 等20个字段
    需求:用户修改了 UserName,其他不变。
    ⿻采用 PATCH,仅向 URL 提交 UserName 的局部更新请求。
    ⿻采用 PUT,必须将所有 20 个字段一并提交到 URL,未提交字段被删除。
    PATCH 的最主要好处:节省网络带宽(当 URL 对应的资源是很庞大资源的时候)

    HTTP 协议与 Requests 库

    Requests 库的 head() 方法

    • r.headers : 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回 None

    Requests 库的 post() 方法

    向 URL POST 一个字典,自动编码为 form(表单)

    向 URL POST 一个字符串,自动编码为 data

    Requests 库的 put() 方法

    5 Requests 库主要方法解析

    Requests 库的 7 个主要方法

    方法 说明
    requests.request() 构造一个请求,支撑以下各方法的基础方法
    requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
    requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
    requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST
    requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
    requests.patch() 向HTML网页提交PUT请求的方法,对应于HTTP的PATCH
    requests.delete() 向HTML页面提交删除请求,对应于HTTP的DELETE
    requests.request(method, url, **kwargs)
    
    • method:请求方式,对应get/put/post等七种
      • r = requests. request('GET', url, **kwargs)
      • r = requests.request('HEAD', url, **kwargs)
      • r = requests.request('POST', url, **kwargs)
      • r = requests.request('PUT', url, **kwargs)
      • r = requests.request('PATCH', url, **kwargs)
      • r = requests.request('delete', url, **kwargs)
      • r = requests.request('OPTIONS', url, **kwargs)
    • OPTIONS:向服务器获取一些服务器跟客户端能够打交道的参数,并不与获取资源直接相关。
    • url:拟获取页面的url链接
    • **kwargs:控制访问的参数,共 13 个
      • params:字典或字节序列,作为参数增加到ur1中
      • data:字典、字节序列或文件对象,作为Request的内容
      • json:JSON格式的数据,作为Request的内容
      • headers:字典,HTTP定制头
      • cookies:字典或CookieJar,Request中的cookie
      • auth:元组,支持HTTP认证功能
      • files:字典类型,传输文件
      • timeout:设定超时时间,秒为单位
      • proxies:字典类型,设定访问代理服务器,可以增加登录认证
      • redirects:True/False,默认为 True,重定向开关
      • stream:True/False,默认为 True,获取内容立即下载开关
      • verify:True/False,默认为 True,认证 SSL 证书开关
      • cert:本地 SSL 证书路径

    使用示例:

    import requests
    kv = {'key1':'value1','key2':'value2'}
    r = requests.request('GET','http://python123.io/ws',params=kv) 
    print(r.url) 
    # https://python123.io/ws?key1=value1&key2=value2
    

    这两种方法是等价的:
    r = requests.request("get", "http://www.baidu.com")
    r = requests.get("http://www.baidu.com")

    fs = {'file':open('data.x1s','rb')}
    r = requests.request('pOST','http://python123.io/ws',files=fs) 
    pxs = { 'http':'http://user:pass@10.10.10.1:1234'
            'https':'https://1e.10.10.1:4321'         }
    r = requests.request('GET','http://www.baidu.com',proxies=pxs) 
    

    http 协议中,向某一个 url 提交资源的功能在服务器上是严格受控的,因为这存在很大的安全问题。

    网络爬虫的尺寸:

    小规模,数据量小 中规模,数据规模较大 大规模,搜索引擎
    爬取速度不敏感 爬取速度敏感 爬取速度关键
    Requests 库 Scrapy 库 定制开发
    爬取网页、玩转网页 爬取网站、爬取系列网站 爬取全网

    相关文章

      网友评论

          本文标题:Requests 库入门

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