zoukankan      html  css  js  c++  java
  • python网络爬虫学习笔记(一)Request库

    一、Requests库的基本说明


    引入Rquests库的代码如下

    import requests

    库中支持REQUEST, GET, HEAD, POST, PUT, PATCH, DELETE共7个方法。其中REQUEST方法为基础方法,其它六种方法均通过调用REQUEST方法实现。为了编写程序的便利性,提供了这额外6个方法。我们首先看一下这6个方法的含义,及其在库中对应的函数:

    • GET:请求指定的页面信息,对应requests.get()
    • HEAD:只请求页面的头部,对应requests.head()
    • POST:请求服务器接收所指定的文档作为对所标识的URI的新的从属实体,对应requests.post()
    • PUT:从客户端向服务器取代指定的文档的内容,对应requests.put()
    • PATCH:与PUT功能类似,不同之处在于PUT提交信息的方式是截断的,而PATCH可以进行局部更新。因此与PUT相比,在某些情况下,PATCH可以节省网络带宽。对应requests.patch()
    • DELETE:请求服务器删除指定页面,对应requests.delete()

    Requests库支持以下6种访问异常:

    • ConnectionError:网络连接错误异常,如DNS查询失败、拒绝连接等
    • HTTPError:HTTP错误异常
    • URLRequired:URL缺失异常
    • TooManyRedirects:超过最大重定向次数,产生重定向异常
    • ConnectTimeout:连接远程服务器超时异常
    • Timeout:请求URL超时,产生超时异常

    二、HTTP协议简介


    HTTP(Hypertext Transfer Protocol),指超文本传输协议。这一一种基于“请求与相应”模式的无状态的应用层协议(工作在TCP协议之上)。所谓“无状态”,是指多次请求之间并没有关联。HTTP协议采用URL作为定位网络资源的标识,其格式如下:

    http://host[:port][path]

    • host:合法的Internet主机域或IP地址
    • port:端口号,缺省为80
    • path:请求资源的路径

    HTTP协议对资源的操作方法即为Requests库支持的6个方法(GET, HEAD, POST, PUT, PATCH, DELETE)。

    三、Requests库函数详解


    3.1 requests.request()

    request()函数接受的参数如下:

    requests.request(method, url, **kwargs)

    其中method为请求方式,对应为'GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'delete', 'OPTIONS'七种方式。

    **kwargs为13个可选的控制访问方式,包括:

    • params:字典或字节序列,可以作为参数增加到url中
    • data:字典、字节序列或文件对象,作为Request的内容
    • json:JSON格式的数据,作为Request的内容
    • headers:字典,为HTTP定制头
    • cookies:字典或CookieJar,Request中的cookie
    • auth:元组类型,支持HTTP认证功能
    • files:字典类型,用于传输文件
    • timeout:设定超时时间(以秒为单位)
    • proxies:字典类型,设定访问代理服务器,可以增加登录认证
    • allow_redirects:True/False,默认为True,为重定向开关
    • stream:True/False,默认为True,获取内容立即下载开关
    • verify:True/False,默认为True,认证SSL证书开关
    • cert:本地SSl证书路径

    通过几段运行实例来理解控制访问参数:

    params:字典或字节序列,可以作为参数增加到url中。

    data的格式为字典、字节序列或文件对象,作为Request的内容。

    headers格式为字典,可以为HTTP定制头。

    files为字典类型,可用于传输文件。

    proxies为字典类型,设定访问代理服务器,可以增加登录认证。

    掌握了request(),对接下来的封装函数的理解就十分简单了。

    3.2 requests.get()

    此方法最为常用。最简单的用法即为

    r=requests.get(url)

    此处,get()构造了一个向服务器请求资源的Request对象(在Requests库内部生成)。函数返回一个包含服务器所有相关资源Response对象

    get()函数完成的参数列表如下

    requests.get(url, params = None, **kwargs)
    • url:逆获取页面的url链接
    • params:在url中增加的额外参数,格式为字典或者字节流,此参数是可选的
    • **kwargs:其它12个控制访问的参数,也是可选的

    正如前文所述,从get()的如下封装源代码可以看出,它是调用request()来封装的。

    def get(url, params = None, **kwargs):
        kwargs.setdefault('allow_redirects', True)
        return request('get', url, params = params, **kwargs)

    下面我们来看一段运行实例。

    其中,status_code是Response对象的属性之一。Response对象比较重要的几项属性罗列如下:

    • status_code:HTTP请求的返回状态,e.g.200表示成功,404表示失败
    • text:HTTP相应内容的字符串形式,即url对应的页面内容
    • encoding:从HTTP header中猜测响应内容的编码方式
    • apprent_encoding:从内容分析出的响应内容编码方式(备选编码)
    • content:HTTP响应内容的二进制形式

    基于此,我们给出爬取网页的一个通用代码框架:

    import requests
    
    def getHTMLText(url):
        try:
            r = requests.get(url, timeout=30)
            r.raise_for_status
            r.encoding = r.apparent_encoding
            return r.text
        except:
            return "exception detected"
    
    if __name__ == "__main__":
        url = "http://www.baidu.com"
        print(getHTMLText(url))

    其中,raise_for_status()方法可以判断返回的Response对象是否出现异常。如果返回状态不是200,产生requests.HTTPError。

    3.3 requests.head()

    head()的参数列表如下:

    requests.head(url, **kwargs)

    其中**kwargs为13个控制访问参数,同request()。

    head()的含义如前所述,通过一段运行实例可以更好地理解。

    从实例中看到,运用head()爬取了百度首页的头部信息。但是如果我们想要得到网页文本内容,返回值则为空。

    3.4 requests.post()

    post()参数列表如下:

    requests.post(url, data = None, json = None, **kwargs)

    其中,**kwargs为其余11个控制访问参数。

    下面来比较两段运行实例:

    事实上,当下我们向URL post一个字典时,会自动被编码为form(表单)。

     3.5 requests.put()

    requests.put(url, data=None, **kwargs)

    其中,**kwargs为其余12个控制访问参数。

    下面是一段运行实例:

    3.6 requests.patch()

    requests.patch(url, data=None, **kwargs)

    **kwargs为其余12个控制访问参数。

    3.7 requests.delete()

    requests.delete(url, **kwargs)

    url为拟删除页面的ur链接。**kwargs为13个控制访问参数。

    相关内容为笔者根据中国大学MOOC网站嵩天教授的python爬虫课程所撰写的学习笔记,感谢中国MOOC学习平台提供的学习资源与嵩老师的授课。

  • 相关阅读:
    Daily Scrum (2015/10/28)
    Dailu Scrum (2015/10/27)
    wenbao与cmd
    wenbao与IIS
    wenbao与模板
    wenbao与git
    wenbao与vscode
    wenbao与矩阵
    wenbao与面试题
    wenbao 与将linux系统(kali)装入U盘
  • 原文地址:https://www.cnblogs.com/Jeffrey-Y/p/10306755.html
Copyright © 2011-2022 走看看