• Python Requests库简单入门


    我对Python网络爬虫的学习主要是基于中国慕课网上嵩天老师的讲授,写博客的目的是为了更好触类旁通,并且作为学习笔记之后复习回顾。

    1.引言

    requests 库是一个简洁且简单的处理HTTP请求的第三方库。

    requests的最大优点是程序编写过程更接近正常URL 访问过程。

    这个库建立在Python 语言的urllib3 库基础上,类似这种在其他函数库之上再封装功能提供更友好函数的方式在Python 语言中十分常见。在Python 的生态圈里,任何人都有通过技术创新或体验创新发表意见和展示才华的机会。

    request 库支持非常丰富的链接访问功能,包括:国际域名和URL 获取、HTTP 长连接和连接缓存、HTTP 会话和Cookie 保持、浏览器使用风格的SSL 验证、基本的摘要认证、有效的键值对Cookie 记录、自动解压缩、自动内容解码、文件分块上传、HTTP(S)代理功能、连接超时处理、流数据下载等。

    有关requests 库的更多介绍请访问:

     http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

    2.安装测试

    采用pip指令安装requests库:

    >pip install requests

    测试;

    3.主要方法

     request库的7个主要方法

    方法 说明
    requests.request() 构造一个请求,支撑以下各方法的基础方法
    requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
    requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST
    requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
    requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
    requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
    requests.delete() 向HTML页面提交删除请求,对应于HTTP的DELETE
       

    requests库的get()方法

    requests.get(url, params=None, **kwargs)

    url : 拟获取页面的url链接

    params : url中的额外参数,字典或字节流格式,可选

    **kwargs: 12个控制访问的参数

    get方法的原码

    实际上get方法是用request方法来封装的,其他六种方法也是,根本上只有一种request方法!!!

    4.Response对象

    Requests库的2个重要对象:

    Response对象包含服务器返回的所有信息,同时也包含向服务器请求的Request信息。

    Response对象属性

     

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

    r.encoding:如果header中不存在charset,则认为编码为ISO‐8859‐1(这种编码并不能解析中文!!!)

    r.text根据r.encoding显示网页内容

    r.apparent_encoding:根据网页内容分析出的编码方式可以看作是r.encoding的备选

    原则上来说其实apparent_encoding编码方式比encoding更为准确,encoding并没有分析内容,只是从header相关字段中提取编码数,而apparent_encoding却是实实在在分析内容,并且找到可能的编码。 

    5.Response库的异常

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

    请求URL超时,产生超时异常(发憷请求到获得内容整个过程)

    raise_for_status()方法:

    raise_for_status()方法能在非成功响应后产生异常,即只要返回的请求状态status_code 不是200,这个方法会产生一个异常,用于try…except 语句。

    使用异常处理语句可以避免设置一堆复杂的if 语句,只需要在收到响应调用这个方法,就可以避开状态字200以外的各种意外情况。

    6.通用代码框架

     1 import requests
     2 def getHTMLText(url):
     3     try:
     4         r = requests.get(url, timeout=30)
     5         r.raise_for_status()  # 如果状态不是200, 引发HTTPError异常
     6         r.encoding = r.apparent_encoding
     7         return r.text
     8     except:
     9         return "产生异常"
    10  
    11 if __name__=="__main__":
    12     url = "http://www.baidu.com"
    13     print(getHTMLText(url))
  • 相关阅读:
    hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)
    HDU 2147 kiki's game(博弈)
    C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭
    C++学习46 getline()函数读入一行字符 一些与输入有关的istream类成员函数
    C++学习45 流成员函数put输出单个字符 cin输入流详解 get()函数读入一个字符
    C++学习44 格式化输出,C++输出格式控制
    C++学习43 输入输出有关的类和对象
    C++学习42 输入和输出的概念
    C++学习41 exception类
    C++学习40 抛出自己的异常
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/9496323.html
Copyright © 2020-2023  润新知