爬虫笔记(一):Requests

BEGIN:

爬虫系列:

爬虫笔记(二):爬取网页的通用代码框架

爬虫笔记(三):HTTP协议及Requests库方法

 

一、准备

1、requests安装

pip install requests

2、测试(IDLE)

import requests
r = requests.get("http://www.baidu.com") # 获取百度页面内容
r.status_code #状态码为200表示访问成功
r.encoding = 'utf-8' # 更改编码
r.text #打印网页内容

二、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网页提交局部修改请求,对应于HTTP的PATCH

requests.delete()    :向HTML也买你提交删除请求,对应于HTTP的DELETE

request()方法为基础方法,其他6个方法都是通过调用request()方法实现的,事实上,requests库可以认为只有一个方法,即request()方法。

requests.get()是获取一个网页最简单的方法:

r = requests.get(url)

这里通过get()方法和url 构造一个向服务器请求资源的Request对象,这个对象是request库内部生成的(python 大小写敏感,Request对象开头大写R);

requests.get()返回的内容用r表示,这个r是一个包含从服务器返回的所有资源的Response对象。

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

url :拟获取页面的url链接;

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

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

 Requests库的两个重要对象:Response和Request,其中Response对象包含了爬虫返回的内容。

Response对象

import requests
r = requests.get("http://www.baidu.com") # 获取百度页面内容
r.status_code #状态码为200表示访问成功
r.encoding = 'utf-8' # 更改编码
r.text #打印网页内容
type(r) # 返回Response类<class 'requests.models.Response'>
r.headers #get请求获取页面的头部信息 {'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Thu, 12 Nov 2020 08:49:47 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:28:24 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Transfer-Encoding': 'chunked'}

requestes.get()方法返回一个Response对象。

Response对象的属性:

r.status_code     :HTTP请求的返回状态,200表示连接成功,404表示失败

r.text           :HTTP响应内容的字符串形式,即,url对应的页面内容

r.encoding          :从HTTPheader中猜测的相应内容编码方式

r.apparent_encoding  :从内容中分析出的响应内容编码方式(备选编码方式)

r.content        :HTTP响应内容的二进制形式

再执行完get方法后,用r.status_code判断Response返回状态,如果状态码为200,那么可以继续执行r.text、r.encoding、r.apparent_enconding、r.content等方法;否则(状态码为404或其他),表示某些原因出错将产生异常。

r.encoding:编码方式是从HTTPheader中的charset字段获得,如果HTTPheader中有这样的字段说明响应的服务器对其资源的编码是有要求的,而这样的编码会获得回来存在apparent_encoding中,但是并非所有服务器对其资源编码都有相关要求,所以如果当header中不存在charset字段,则默认编码为ISO-8859-1,运行如下命令:

import requests
r = requests.get("http://www.baidu.com") # 获取百度页面内容
r.status_code #状态码为200表示访问成功
r.text #打印网页内容,有中文乱码
r.enconding # 查看编码 ISO-8859-1
r.apparent_encoding #utf-8
r.encoding = 'utf-8' # 修改编码
r.text #能正常显示中文

原则上说,apparent_encoding的编码比enconding编码更准确,因为enconding并没有分析内容,apparent_encoding则是通过分析内容提取编码。

 

三、Requests库的异常

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

requests.HTTPError      :HTTP错误异常

requests.URLRequired    :URL缺失异常

requests.TooManyRedirects :超过最大重定向次数,产生重定向异常

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

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

Response的异常方法:

r.raise_for_status()      :如果不是200,产生requests.HTTPError;200表示返回内容正确

 

推荐网址:

Requests官方网址:http://www.python-requests.org

END.

posted @ 2020-11-16 20:19  Gangpei  阅读(132)  评论(0编辑  收藏  举报