zoukankan      html  css  js  c++  java
  • 爬虫与Python:(三)基本库的使用——3.网络请求库之request使用介绍

    Python爬虫中,除了urlib()外,还有一个使用的比较多的HTTP请求库——requests。这个库也是常用于HTTP请求模块,它使用Python语言编写,可以方便的对网页进行爬取,是学习Python比较好的HTTP请求模块。

    Python3中没有默认安装requests库,在前一篇文章中,已经介绍了requests的安装。其中,requests库的pip安装命令为 pip install requests

    接下来,我们来看看requests库的7个主要方法,如下表所示:

    方法 解释
    requests.request() 构造一个请求,支持以下各种方法
    requests.get() 获取HTML的主要方法
    requests.head() 获取HTML头部信息的主要方法
    requests.post() 向HTML网页提交POST请求的方法
    requests.put() 向HTML网页提交PUT请求的方法
    request.patch() 向HTML提交局部修改请求
    request.delete() 向HTML提交删除请求

    1. requests.get()

    requests.get()方法时常用方法之一,用户获取HTML。我们可以通过该方法链接其他方法,格式如下:

    1 res = requests.get(url , params ,**kwargs)

    参数说明见下表:

    参数 描述
    url 需要爬取的网站地址
    params URL中的额外参数,字典或字节流格式,为可选参数。
    **kwargs
    控制访问参数,具体详见下表。
    **Kwargs的参数
    参数名称 描述
    params 字典或字节列,作为参数增加到url中,使用这个参数可以把一些键值对以?key=value1&key2=value2的模式增加到url中。
    data 字典、列表或元组的字节的文件,作用是向服务器提交资源,作为requests的内容。与params不同的是,data提交的数据并不放在URL链接中,而是放在URL链接对应位置的地方作为数据存储。它也可以接受一个字符串对象。
    json

    JSON格式的数据,json是HTTP中经常使用的数据格式,作为内容部分可以向服务器提交。例如:

    1 kv= {'key1':'value1'}
    2 r = requests.request('POST',"http://python123.io/ws",json=kv)
    headers

     字典是HTTP的相关语,对应了向某URL访问时发起的HTTP的头字段,可以用字段来定义HTTP访问的HTTP头,可以用来模拟任何想模拟的浏览器对URL发起访问。例如:

    1 hd = {'user-agent':'Chrome/10'}
    2 r = requests.requests('POST','http://python123.io/ws',headers=hd)
    cookies  字典或CookieJar,指的是从HTTP中解析Cookie。
    auth  元组,用来支持HTTP认证功能
    files

     字典,是用来向服务器传输文件时使用的字段。例如

     fs = {'files':open('data.txt','rb')} 

    timeout  用于设定超时时间,单位为秒,当发起一个GET请求时可以设置一个timeout时间,如果timeout时间内请求内容没有返回,将产生一个timeout的异常。
    proxies  字典,用来设置访问代理服务器。
    allow_redirects  开关,表示是否允许对URL进行重定向,默认为True
    stream  开关,指是否对获取内容进行立即下载,默认为True。
    verify  开关,用于认证SSL证书,默认为True。
    cert  用于设置保存本地SSL证书路径。

     前面的示例代码是构造一个服务器请求requests,返回一个包含服务器资源的Response对象。其中Request对象有以下属性,如表3-3所示。

    Response对象的属性
    属性 说明
    status_code HTTP请求的返回状态,若为200表示请求成功
    text HTTP响应内容的字符串形式,即返回的页面内容
    encoding 从HTTP header中猜测的相应内容编码方式
    apparent_encoding 从内容中分析
    content  HTTP响应内容的二进制形式

     示例代码如下:

    1 import  requests;
    2 
    3 url = 'https://www.baidu.com/';
    4 r = requests.get(url);
    5 print(r.status_code)
    6 print(r.encoding)
    7 print(r.apparent_encoding)
    8 print(r.text)

    运行结果如下图:

    2.requests库的异常

    requests库有时会产生异常,如网络连接错误、HTTP错误异常、重定向异常、请求URL超时异常等。这里可以利用r.raise_for_status()语句来捕捉异常,该语句在方法内部判断r.status_code是否等于200,如果不等于,则抛出异常,示例代码如下。

     1 import requests
     2 
     3 url = 'https://www.baidu.com/';
     4 try:
     5     r = requests.get(url , timeout=30)  # 请求超时时间为30s
     6     r.raise_for_status()    # 如果状态不是200则引发异常
     7     r.encoding = r.apparent_encoding # 配置编码
     8     print(r.text)
     9     print(1)
    10 except:
    11     print("产生异常")

    3. requests.head()

    通过requests.head()方法,可以获取地址的header头部信息,示例代码如下:

    1 import requests
    2 
    3 url = 'https://www.baidu.com/';
    4 r = requests.head(url)
    5 print(r.headers)

    4. requests.post()

    requests.post()反复一般用于表单提交,向指定URL提交数据,可提交字符串、字典、文件等数据,示例代码如下:

     1 import  requests
     2 
     3 # 向url post 一个字典
     4 payload = {"key1":"value1","key2":"value2"}
     5 r = requests.post("http://httpbin.org/post",data=payload) # 这里的url 并非真实的请求
     6 print(r.text)
     7 
     8 # 向url post 一个字符串,自动编码为data
     9 r = requests.post("http://httpbin.org/post",data="hello") # 这里的url 并非真实的请求
    10 print(r.text)

    5. requests.put()和requests.patch()

    requests。patch()和reques.put()类似,两者不同的是:当patch时,仅需提交修改的字段,但put时,必须将20个字段一起提交到URL,未提交的字段将会删除;patch的优点是节省网络带宽,示例代码如下:

     1 import  requests
     2 
     3 # requests.put
     4 payload = {"key1":"value1","key2":"value2"}
     5 r = requests.put("http://httpbin.org/put",data=payload) # 这里的url 并非真实的请求
     6 print(r.text)
     7 
     8 # requests.post
     9 payload = {"key1":"value1","key2":"value2"}
    10 r = requests.patch("http://httWpbin.org/patch",data=payload) # 这里的url 并非真实的请求
    11 print(r.text)
  • 相关阅读:
    [Java] java中的异常处理
    Jmeter之定时器
    Jmeter之检查点
    Jmeter之集合点
    Jmeter之关联
    Jmeter之参数化
    Jmeter测试WebService接口
    Jmeter测试MySQL数据库
    Jmeter测试HTTP接口
    使用Postman对HTTP接口进行功能测试
  • 原文地址:https://www.cnblogs.com/luyj00436/p/15399664.html
Copyright © 2011-2022 走看看