文章目录
教程地址:
https://www.icourse163.org/course/BIT-1001870001?tid=1001962001
第一单元:Requests库入门
1.1 requests库的7个主要方法
方法 | 说明 |
---|---|
1. requests.request() | 构造一个请求,支撑其它方法 |
2. get() | 获取网页,构造一个向服务器请求资源的Request对象 |
3. head() | 获取网页头信息的方法 |
4. post() | 向网页提交post请求的方法 |
5. put() | 向网页提交put请求的方法 |
6. patch() | 向网页提交局部修改请求 |
7. delete() | 向网页提交删除请求 |
- get()方法
格式:requests.get(url, params=None, **kwargs)
参数:
url
:URL for the new : class:Request
object.
功能:
r = requests.get(url)
,get()
函数构造一个向服务器请求资源的Request对象,
返回值:
return request('get', url, params=params, **kwargs)
返回Response对象,Response对象包含从服务器返回的所有信息,
1.2 Response对象的属性
status_code # 请求的返回状态,200表示连接成功,400表示失败
text # url对应的页面内容
encoding # 从HTTP header中猜测的响应内容,从header中的charset字段获得,若没有charset,则默认ISO-8859-1编码,它不支持中文,apparent_encoding可能更准确。
apparent_encoding # 从内容中分析出的响应内容编码方式(备选编码方式)
content # HTTP响应内容的二进制形式
流程:
判断status_code,若是200,则利用text、encoding、apparent_encoding
1.3 Requests库的异常
-
ConnecttionError
网络连接错误异常,如DNS查询失败、拒绝连接等 -
HTTPError
HTTP错误异常 -
URLRequired
URL缺失异常, -
TooManyRedirects
超过最大重定向次数,产生重定向异常 -
ConnectTimeout
连接远程服务器时异常 -
Timeout
请求URL超时,产生超时异常,指的是整个请求过程的超时,而ConnectTimeout指的是连接过程。
1.4 操作异常的方法
raise_for_status()
方法,如果不是200,产生HTTPError异常
1.5 爬取网页的通用代码框架
import requests
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status() # 如果状态不是200,引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
except:
return '产生异常'
if __name__ == '__main__':
url = 'http://www.baidu.com'
print(getHTMLText(url))
url1 = 'www.baidu.com'
print(getHTMLText(url1))
1.6 HTTP协议对资源的操作
方法 | 说明 |
---|---|
GET | 请求获取URL位置的资源 |
HEAD | 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息 |
POST | 请求向URL位置的资源后附加新的数据 |
PUT | 请求向URL位置存储一个资源,覆盖原URL位置的资源 |
PATCH | 请求局部更新URL位置的资源,即改变该处资源的部分内容 |
DELETE | 请求删除URL位置存储的资源 |
1.6.1 HTTP协议与 Requests库关系
HTTP协议方法 | Requests库方法 | 功能一致性 |
---|---|---|
GET | requests.get() | 一致 |
HEAD | requests.head() | 一致 |
POST | requests.post() | 一致 |
PUT | requests.put() | 一致 |
PATCH | requests.patch() | 一致 |
DELETE | requests.delete() | 一致 |
1.7 requests库中request方法
格式:
requests.request(method, url, **kwargs)
参数:
- method : 请求方式,对应get/put/post等7种
r = requests.request(‘GET’, url, **kwargs)
r = requests.request(‘HEAD’, url, **kwargs)
r = requests.request(‘POST’, url, **kwargs)
r = requests.request(‘PUT’, url, **kwargs)
r = requests.request(‘PATCH’, url, **kwargs)
r = requests.request(‘delete’, url, **kwargs)
r = requests.request(‘OPTIONS’, url, **kwargs) - url : 拟获取页面的url链接
- kwargs: 控制访问的参数,共13个,均为可选项
-
params : 字典或字节序列,作为参数增加到url中
>>> kv = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.request('GET', 'http://python123.io/ws', params=kv) >>> print(r.url) http://python123.io/ws?key1=value1&key2=value2
-
data : 字典、字节序列或文件对象,作为Request的内容
>>> kv = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.request('POST', 'http://python123.io/ws', data=kv) >>> body = '主体内容' >>> r = requests.request('POST', 'http://python123.io/ws', data=body)
-
json : JSON格式的数据,作为Request的内容
>>> kv = {'key1': 'value1'} >>> r = requests.request('POST', 'http://python123.io/ws', json=kv)
-
headers : 字典,HTTP定制头
>>> hd = {'user‐agent': 'Chrome/10'} >>> r = requests.request('POST', 'http://python123.io/ws', headers=hd)
-
cookies : 字典或CookieJar,Request中的cookie
-
auth : 元组,支持HTTP认证功能
-
files : 字典类型,传输文件
>>> fs = {'file': open('data.xls', 'rb')} >>> r = requests.request('POST', 'http://python123.io/ws', files=fs)
-
timeout : 设定超时时间,秒为单位
>>> r = requests.request('GET', 'http://www.baidu.com', timeout=10)
-
proxies : 字典类型,设定访问代理服务器,可以增加登录认证
>>> pxs = { 'http': 'http://user:pass@10.10.10.1:1234' 'https': 'https://10.10.10.1:4321' } >>> r = requests.request('GET', 'http://www.baidu.com', proxies=pxs)
- allow_redirects : True/False,默认为True,重定向开关
- stream : True/False,默认为True,获取内容立即下载开关
- verify : True/False,默认为True,认证SSL证书开关
- cert : 本地SSL证书路径