从零开始学Python-3(Request库入门)
Posted 黄鹏宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始学Python-3(Request库入门)相关的知识,希望对你有一定的参考价值。
从零开始学Python-3(爬虫)
一个例子:
获取网页的方法
r = requests.get(url)
构造一个向服务器请求资源的Request对象,返回一个包含服务器资源的Response 对象
requests的完整方法
url : 逆获取页面的url链接
params :url中的额外参数,字典或字节流格式,可选
**kwargs : 12个控制访问的参数
Response对象的属性(1)
属性 | 说明 |
---|---|
r.status_code | HTTP请求的返回状态,200表示连接成功,404表示失败 |
r.text | HTTP响应内容的字符串形式,即,url对应的页面内容 |
r.encoding | 从HTTP header中猜测的响应内容编码方式 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.content | HTTP响应内容的二进制形式 |
?
Response对象的属性 ---r.status_code
① 正确(200) 可以获取对应的属性
② 404或其他 某些原因出错,或产生了异常
Response的编码
r.encoding | 从HTTP header中猜测的响应内容编码方式 |
---|---|
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.encoding:如果header中不存在charset,则认为编码为ISO-8859-1
? r.text根据r.encoding显示网页内容
r.apparent_encoding:根据网页内容分析出的编码方式
可以看作是r.encoding的备选
Response的异常
异常 | 说明 |
---|---|
requests.ConnectionError | 网络连接错误异常,如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 ‘产生异常‘
#这个是主函数
if __name__ == ‘__main__‘:
url = ‘http://www.baidu.com‘
print(getHTMLText(url))
HTTP协议及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 |
HTTP 是什么
HTTP,Hypertext Transfer Protocol,超文本传输协议
HTTP是一个基于“请求与响应”模式的、无状态的应用层协议
HTTP协议采用URL作为定位网络资源的标识,URL
格式如下:
http://host[:port][path]
host: 合法的Internet主机域名或IP地址
port: 端口号,缺省端口为80
path: 请求资源的路径
HTTP协议
HTTP URL 实例
HTTP协议对资源的操作
方法 | 说明 |
---|---|
GET | 请求获取URL位置的资源 |
HEAD | 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息 |
POST | 请求向URL位置的资源后附加新的数据 |
PUT | 请求向URL位置存储一个资源,覆盖原URL位置的资源 |
PATCH | 请求局部更新URL位置的资源,即改变该处资源的部分内容 |
DELETE | 请求删除URL位置存储的资源 |
HTTP协议对资源的操作
用户----->服务器 PUT POST PATCH DELETE
服务器------>用户 GET HEAD
URL 就是他们的描述
注意:PATCH和PUT的区别
PATCH 不会覆盖原有的数据
PUT会覆盖原有的数据
PATCH的最主要好处:节省网络带宽
HTTP协议和Requests库
HTTP协议方法 | Requests库方法 | 功能一致性 |
---|---|---|
GET | requests.get() | 一致 |
HEAD | requests.head() | 一致 |
O | requests.post() | 一致 |
PUT | requests.put() | 一致 |
PATCH | requests.patch() | 一致 |
DELETE | requests.delete() | 一致 |
Requests库的head()方法
head()方法就是获取头文件
post就是更新相关的代码
put会覆盖原有的数据
使用方法如下:
import requests
if __name__ == ‘__main__‘:
payload = {‘Money‘: ‘100‘, ‘Power‘: ‘200‘}
r = requests.post(‘http://httpbin.org/put‘, data=payload) # 返回的是一个字典,自动编码为form(表单),是更新数据
r = requests.put(‘http://httpbin.org/put‘, data=payload) # 返回的是一个字典,自动编码为form(表单),是覆盖数据
r = requests.put(‘http://httpbin.org/put‘, data=‘ABC‘) # 向URL,POST一个字符串,自动编码为数据
print(r.text)
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 |
关于requests.request(method,url,**kwargs)
method : 请求方式,对应get/put/post等7种
? url : 拟获取页面的url链接
? **kwargs: 控制访问的参数,共13个
requests.request(method, url, **kwargs)
? method : 请求方式
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)
**kwargs:控制访问的参数,均为可选项
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证书路径
requests.get(url, params=None, **kwargs)
url : 拟获取页面的url链接
?
params : url中的额外参数,字典或字节流格式,可选
?
**kwargs: 12个控制访问的参数
requests.head(url, **kwargs)
url : 拟获取页面的url链接
?
**kwargs: 12个控制访问的参数
requests.post(url, data=None, json=None, **kwargs)
url : 拟更新页面的url链接
data : 字典、字节序列或文件,Request的内容
?
json : JSON格式的数据,Request的内容
?
**kwargs: 12个控制访问的参数
requests.patch(url, data=None, **kwargs)
**
? url : 拟更新页面的url链接
?
data : 字典、字节序列或文件,Request的内容
?
**kwargs: 12个控制访问的参数
requests.delete(url, **kwargs)
? url : 拟删除页面的url链接
? **
kwargs: 12个控制访问的参数
requests.get(url, params=None, **kwargs)
url : 拟获取页面的url链接
?
params : url中的额外参数,字典或字节流格式,可选
?
**kwargs: 12个控制访问的参数
以上是关于从零开始学Python-3(Request库入门)的主要内容,如果未能解决你的问题,请参考以下文章
Python 3.5从零开始学 (刘宇宙 著) 完整pdf扫描版[41MB]