安装
pip install requests
检查是否正确安装
>>> import requests
>>> r = requests.get("http://www.baidu.com")
>>> r.status_code
200
>>> r.encoding = 'utf-8'
>>> r.text
Requests库的get()方法
获得一个网页最简单的一行代码r = requests.get(ulr)
get方法的完整代码
requests.get(url, params=None, **Kwargs)
erl:拟获取页面的url链接
params:url中的额外参数,字典或字节流格式,可选
**Kwargs:12个控制访问的参数
Response对象的属性
属性 | 说明 |
---|---|
r.status_code | HTTP请求返回状态,200表示连接成功,404表示失败(只要不是200,都是失败) |
r.text | HTTP响应内容的字符串形式,即,url对应的页面内容 |
r.encoding | 从HTTP header中猜测的响应内容编码方式 |
r.apparent_encoding | 从内容中分析出响应内容的编码方式(备选编码方式) |
r.content | HTTP响应内容的二进制形式 |
Requests库中的异常
异常 | 说明 |
---|---|
requests.ConnectionEror | 网络连接错误、异常,如DNS查询失败、拒绝连接等 |
requests.HTTPError | HTTP错误异常 |
requests.URLRequired | URL缺失异常 |
requests.TooManyRedirects | 超过最大定向次数,产生重定向异常 |
requests.ConnectTimeout | 连接远程服务器超时异常 |
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 "Error"
if __name__ == "__main__"
url = "http://www.baidu.com"
print(getHTMLText(url))
理解PATCH和PUT的区别
假设URL位置有一组数据UserInfo,包括UserID、UserName等20个字段。
需求:用户改变了UserName,其他不变。
采用PATCH,仅向URL提交UserName的局部更新请求。
采用PUT,必须将所有20个字段一并提交到URL,未提交字段将被删除。
PATCH最主要的的好处是:节省网络带宽
Requests库的request()方法
requests.requests(method, url, **kwargs)
method:请求方式,对应get/put/post等7种
url:拟获取的页面url链接
**Kwargs:控制访问参数,共13个
params:字典或字节序列,作为参数增加到url中
>>> kv = {'key1':'value1', 'key2':'value2'} >>> r = requests.request('GET', 'http://python123.io/ws', parmas=kv) >>> print(r.url) http://python123.io/ws?key1=value1&key2=value2
data:字典、字节序列或文件对象,作为Requests的内容
json:JSON格式数据,作为Requests的内容
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证书路径
Requests库的head()方法
>>> r = requests.head("http://www.baidu.com")
>>> r.headers
{'Server': 'bfe/1.0.8.18', 'Date': 'Thu, 04 Oct 2018 07:41:06 GMT', 'Content-Type': 'text/html', 'Last-Modified': 'Mon, 13 Jun 2016 02:50:36 GMT', 'Connection': 'Keep-Alive', 'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Pragma': 'no-cache', 'Content-Encoding': 'gzip'}
>>> r.text
''
Requests库的post()方法
向服务器提交新增数据
Requests库的put()方法
向服务器提交新增数据,会覆盖原有的数据