爬虫笔记(一):Requests
BEGIN:
爬虫系列:
一、准备
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.