学习Python爬虫(三):Requests库入门级使用

之前我们学习了urllib库,那是Python3.x自带的内置库,而本文要介绍的Requests库(在单词后面有个s),是Python的第三方库——此requests非彼request!


写在前面:库、包、和模块的关系

模块:Python文件

包:Python模块的集合

库:这是参考其他语言的用法,可以是包,也可以是模块


Requests库介绍

Requests库是一个Python第三方库,也是目前公认的最好的Python爬虫第三方库

这是Requests库的官方网站:Requests库官方文档

1)安装Requests库

pip3 install requests

2)使用Request库(新手入门级)

导入库

import requests

构造对象

>>> r = requests.get('http://www.baidu.com')

调用方法

>>> r.status_code
200
>>> r.encoding = 'utf-8'
>>> r.text
#网页内容

好简单哦……不急,我们循序渐进


Requests库的两个重要对象(通过返回的Responce对象获取信息)

1)Request对象:向服务器请求的对象

2)Responce对象:包含爬虫返回的所有内容

Responce对象包含服务器返回的所有信息,也包含用户向服务器请求的Request对象的信息

Responce对象的属性:1)r.status_code:HTTP请求的返回状态,200表示连接成功,404表示失败(不是200都是请求失败);2)r.text:HTTP相应内容的字符串形式,即url对应的页面内容;3)r.encoding:从HTTP header中猜测的相应内容编码方式;4)r.apparent_encoding:从内容分析出的相应内容编码方式(备选编码方式);5)r.content:HTTP相应内容的二进制形式——这五点属性非常重要,务必牢记!

(说明)r.encoding和r.apparent_encoding的区别:前者从HTTP header中的charset字段中解析出饿编码方式,如果没有找到默认为ISO-8859-1编码;后者根据HTTP内容而不是根据头部解析出应该的编码方式,所以当encoding解析不能正确读取时可以尝试用apparent_encoding编码


Requests库的异常类型及通用代码框架

1)requests.ConnectionError:网络连接异常,如DNS查询失败、拒绝连接等

2)requests.HTTPError:HTTP错误异常

3)requess.URLRequired:URL确实失败

4)requests.ConnectTimeout:连接远程服务器超时异常

5)requests.Timeout:请求URL超时,产生超时异常

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 "An Exception raised!"

Requests库的方法(简单使用)

前一章讲过,HTTP对网络资源的操作刚好对应Requests库提供的五种方法(不过实际上有更多方法)

r. get方法(常用,获取网页HTML信息)

参数

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

源代码

def get(url, params=None, **kwags):
    """Send a GET request"""
    kwargs.setdefault('allow_redirects', True)
    return request('get', url, params=params, **kwargs)
    """可以看出requests.get()实际上通过request方法进行封装——事实上,requests库提供的七个方法都是通过requests.request()方法进行的封装"""

r. head方法

head方法用于获取网页的头部信息

head方法可以用很少的网络流量获得网络资源的概要信息

这里写图片描述

r. post方法

post方法向服务器提交新增信息

当我们向URL POST一个字典,会被自动编码提交到FORM字段下

学习Python爬虫(三):Requests库入门级使用_第1张图片

另外,PUT方法和POST方法类似,不过会把原来的数据覆盖掉


Requests库的方法(request方法详解)

前面讲到,Requests库提供了一些和HTTP对网络资源操作相对应的方法,当然Request库提供的方法还有另外一些……

1)requests.request()

构造一个请求,是支撑以下个各种方法的基础方法

2)requests.get()

获取HTML网页的主要方法,对应HTTP的GET

3)requests.head()

获取HTML网页的头部信息,对应HTTP的HEAD

4)requests.post()

向HTML网页提交POST请求,对应HTTP的POST

5)requests.put()

向HTML网页提交PUT请求,对应HTTP的PUT

6)requests.patch()

向HTML网页提交局部请求,对应HTTP的PATCH

7)requests.delete()

向HTML网页提交删除请求,对应HTTP的DELETE

下面具体讲解上面的方法

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

method是请求方式,可选的请求方式有:GETHEADPOATPUTPATCHdeleteOPTIONS,一种七种(服务器和客户端打交道的七种方式)

看到这里,对前面熟悉的同学就知道了:要模拟一个客户端,我们既可以通过requests.对应方法()来实现,也可以通过request.request(method=对应方法, url, **kwargs)来实现——那么这两种模拟请求的方式有什么区别呢?区别或者说联系,就是前者是通过后者封装起来的

举栗子

这里写图片描述

以上的举例,仅仅作为抛砖引玉的作用,具体的操作还得靠自己上机实践,从细节上体验每一个方法的使用;看完本文,希望大家能够熟练掌握GET方法GET方法在requests库中十分常用(在request库中最常使用的就是get方法,入门级掌握 requests.get和requests.head就可以了)

你可能感兴趣的:(Python,语言)