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 |
与HTTP协议一一对应
简单的使用
1 | import requests |
重要方法 : requests.request()
原型 : requests.request(method,url,**kwargs)
method : 对应http的七种请求方法:get,post,put,delete等
url : 请求的url链接
**kwargs : 控制访问的参数
当查看其它方法,如get()、post()的源代码时,可以发现它们其实都是对request()方法的封装。
常用方法 : get() , head() , post()
因为安全的原因,一般不会支持对url资源的操作,所以像put,delete,patch,option请求都不常用。
requests.get()
原型 : requests.get(url,params=None,**kwargs)
url : 请求的url链接
params : url中的额外参数,字典或字节流格式,可选
**kwargs : 控制访问的参数
get请求方式因为参数是显式存在于url上所有传参可以这样写
方法一:
1 | url = "https://www.baidu.com/s?wd=python" |
方法二:
1 | url = "https://www.baidu.com/s" |
两种方法执行结果都是
https://www.baidu.com/s?wd=python
requests.post()
原型 : requests.post(url,data=None, json=None, **kwargs)
url : 请求的url链接
data : 请求的内容,可以是字典,字节序列或文件
json : JSON格式数据,也是请求的内容
**kwargs : 控制访问的参数
当POST字典时
1 | url = ... |
会自动编码成form表单
当POST字符串时
1 | url = ... |
会自动编码成data
requests.head()
原型 : requests.head(url, **kwargs)
url : 请求的url链接
**kwargs : 控制访问的参数
只要header时使用
控制访问参数
参数 | 说明 |
---|---|
params | 字典或字节序列,作为参数增加到url中 |
data(常用) | 字典、字节序列或文件对象,作为Request的内容 |
json | JSON格式的数据,作为Request的内容 |
headers(常用) | 字典,HTTP定制头 |
cookies(常用) | 字典或CookieJar,Request中的cookie |
auth | 元组,支持HTTP认证功能 |
files | 字典类型,传输文件 |
timeout | 设定超时时间,秒为单位 |
proxies(常用) | 字典类型,设定访问代理服务器,可以增加登录认证 |
allow_redirects | True/False,默认为True,重定向开关 |
stream | True/False,默认为True,获取内容立即下载开关 |
verify | True/False,默认为True,认证SSL证书开关 |
cert | 本地SSL证书路径 |
headers选项
自定义head头
1 | hd = {'user‐agent': 'Chrome/10'} |
cookies选项
带cookies访问
1 | ck = {'user': 'admin'} |
proxies选项
设置代理
1 | pxs = { |
Response对象
可以在交互式窗口使用dir(object)查看对象的属性和方法
1 | >>>r=requests.get("https://www.baidu.com") |
常用属性
属性 | 说明 |
---|---|
r.headers | HTTP响应头 |
r.status_code | HTTP请求的返回状态,200表示连接成功,404表示失败 |
r.text | HTTP响应内容的字符串形式,即url对应的页面内容 |
r.encoding | 从HTTP header中猜测的响应内容编码方式 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.content | HTTP响应内容的二进制形式 |
编码问题
爬取中文页面时特别注重编码问题
r.encoding是从charset中判断编码,若头中没有则认为编码是ISO‐8859‐1
r.apparent_encoding则是从内容中分析出编码方式
所以一般都可以这么写
1 | r.encoding = r.apparent_encoding |
当然也可以自己指定
1 | r.encoding = 'utf-8' |
异常
Requests异常
异常 | 说明 |
---|---|
requests.ConnectionError | 网络连接错误异常,如DNS查询失败、拒绝连接等 |
requests.HTTPError | HTTP错误异常 |
requests.URLRequiredURL | 缺失异常 |
requests.TooManyRedirects | 超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout | 连接远程服务器超时异常 |
requests.Timeout | 请求URL超时,产生超时异常 |
Response异常
r.raise_for_status()
当状态码不是200时都会产生requests.HTTPError异常
处理
爬网页应该是准确的,所以来个302跳转都不行
而且”网络连接有风险,异常处理很重要”
1 | try: |
通用爬取框架
1 | import requests |