Python之requests库

1、Requests库的安装

http://www.python_requests.org

2、Requsets库的七个主要方法

requests.request()		#构造一个请求,支撑以下各方法的基础方法
requests.get()			#获取HTML网页的主要方法,对应HTTPGET
requests.head()			#获取网页头信息的方法,对应HTTPHEAD
requests.post()			#向HTML网页提交POST请求的方法,对应于HTTPPOST
requests.put()			#向HTML网页提交PUT请求的方法,对应HTTPPUT
requests.patch()		#向HTML页面提交局部修改请求,对应HTTPPATCH
requests.delete()		#向HTML页面提交删除请求,对应于HTTPDELETE
>>>r = requests.head('http://httpbin.org/get')
>>>r.headers
{'Access-Control-Allow-Credentials': 'true', 'Access-Control-Allow-Origin': 
'*', 'Content-Encoding': 'gzip', 'Content-Type': 'application/json', 'Date':
 'Tue, 09 Apr 2019 06:32:59 GMT', 'Server': 'nginx', 'Connection': 'keep-alive'}
 
>>>payload = {'key1':'value1','key2':'value2'}
>>>r=requests.post('http://httpbin.org/get',data=payload)
>>>print(r.text)			#向URL POST一个字典,自动编码为form(表单)
{	...
	“form”:{
		"key1":"value1",
		"key2":"value2"
	},
}	

>>>r=requests.post('http://httpbin.org/get',data='ABC')
>>>print(r.text)			#向URL POST一个字典,自动编码为data
{	...
	"data":"ABC"
	“form”:{},
}	

>>>payload = {'key1':'value1','key2':'value2'}
>>>r=requests.put('http://httpbin.org/get',data=payload)
>>>print(r.text)			
{	...
	“form”:{
		"key1":"value1",
		"key2":"value2"
	},
}
	

requests.requests(method,url,**kwargs)

  • method : 请求方式,对应get/put/post等7种
  • url : 拟获取页面的url链接
  • **kwargs:控制访问的参数,共13个
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中
	>>> kv = {'key1':'value1','key2':'value2'}
	>>> r = requests.request('GET','http://www.baidu.com',params=kv)
	>>>print(r.url)
	http://www.baidu.com/?key1=value1&key2=value2

	data:字典、字节序列或 文件对象,作为Request的内容
	>>> kv = {'key1':'value1','key2':'value2'}
	>>> r = requests.request('POST','http://www.baidu.com',data=kv)
	>>> body = '主体内容'
	>>> r = requests.request('POST','http://www.baidu.com',data=body)

	json:JSON格式的数据,作为Request的内容
	>>> kv = {'key1','value1'}
	>>> r = requests.request('POST','http://www.baidu.com',json=kv)

	headers:字典,HTTP定制头
	cookies:字典或CookieJar,Request中的cookie
	auth:元组,支持HTTP认证功能
	>>>hr = {'user-agent':'Chrome/10'}
	>>>r = requests.request('POST','http://www.baidu.com',headers=hd)

	files:字典类型,传输文件
	>>>fs = {'file':open('data.xls','rb')}
	>>> r.requests.request('POST','www.baidu.com',files=fs)

	timeout:设定超时时间,秒为单位
	>>> r.requests.request('GET','www.baidu.com',timeout=10)

	proxies:字典类型,设定访问代理服务器,可以增加登录认证
	>>>pxs = {'http','http://pass@10.10.10.1:1234'
			  'https':'https://10.10.1:4321'}
	>>>r.requests.request('GET','www.baidu.com',proxies=pxs)

	allow_readirects:True/False,默认为True,重定向开关
	stream:True/False,默认为True,获取内容立即下载开关
	verity: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.put(url,data=None,**kwargs)

  • url:拟获取页面的url链接
  • data:字典、字节序列或文件,Request的内容
  • **kwargs:12个控制访问的参数

requests.patch(url,data=None,**kwargs)

  • url:拟获取页面的url链接
  • data:字典、字节序列或文件,Request的内容
  • **kwargs:12个控制访问的参数

requests.delete(url,**kwargs)

  • url:拟获取页面的url链接
  • **kwargs:12个控制访问的参数

3、Requests库的get()方法

  • r = requests.get(url)
  • 通过使用get方法并且给定url,构造一个向服务器请求资源的Request对象
  • 返回一个包含服务器资源的Response对象

requests.get(url,params=None,**Kwargs)

  • url:拟获取页面的url链接
  • params:url中的额外参数,字典或字节流格式,可选
  • **Kwargs:12个控制访问的参数

在这里插入图片描述

4、Response对象

Response对象包含爬虫返回的内容,Response对象包含服务器返回的所有信息,也包含请求的Request信息。

>>>import requests
>>>r = requests.get("http://www.baidu.com")
>>>print(r.status_code)
200
>>>type(r)
<class 'requests.models,Response'>
>>>r.headers
{'Cache-Control':'private,no-cache,no-store,proxy-revalidate,ection':'Keep-Alice','Transfer-Encoding':'chunked','Server':
Response对象的属性
r.status_code	#HTTP请求的返回状态,200表示连接成功,其他的数值表示连接失败
r.text			#HTTP相应内容的字符串形式,即,url对应的页面内容
r.encoding		#从HTTP header中猜测的响应内容编码方式
r.apparent_encoding		#从内容中分析出的响应内容编码方式(备选编码方式)
r.content		#HTTP响应内容的二进制形式
>>>r.requests.get("http://www.baidu.com")
>>>r.status_code
200
>>>r.text
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type 
content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta 
content=always name=referrer><link rel=stylesheet type=text/css 
href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css>
<title>ç™¾åº¦ä¸€ä¸‹ï¼Œä½ å°±çŸ¥é“</title></head> <body link=#0000cc> 
>>>r.encoding
'ISO-8859-1'
>>>r.apparent_encoding
'utf-8'
>>>r.encoding = "uft-8"
>>>r.text
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type 
content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta 
content=always name=referrer><link rel=stylesheet type=text/css 
href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css>
<title>百度一下,你就知道</title></head> <body link=#0000cc>

5、理解Response的编码

r.encoding		#从HTTP hrader中猜测的响应内容编码方式
r.apparent_encoding		#从内容中分析的响应内容编码方式(备选编码方式)
r.encoding 		#如果header中不存在charset,则认为编码为ISO-8859-1
				r.text根据r.encoding显示网页内容
r.apparent_encoding		#根据网页内容分析出的编码方式
						可以看作是r.encoding的备选

6、Requests库的异常

  • r=requests.get(url)
  • Exception (网络连接有风险,异常处理很重要)
requests.ConnectionError		#网络连接错误异常,如DNS查询失败,拒绝连接等
requests.HTTPError				#HTTP异常错误
requests.URLRequired			#URL缺失异常
requests.TooManyRedirects		#超过最大定向次数,产生重定向异常
requests.ConnectTimeout			#连接远程服务器超时异常
requests.Timeout				#请求URL超时,产生超时异常
r.raise_for_status()			#如果不是200,产生异常 requests.HTTPError
r.raise_for_status() 在方法内部判断r.status_code是否等于200,不需要增加额外的if语句,该语句便于利用 try-except 进行异常处理
try:
	r=requests.get(url,timeout=30)
	r.raise_for_status()	#如果状态不是200,引发HTTPError异常
	r.encoding = r.apparent_encoding
	return r.text
except:
	return "产生异常"

7、HTTP协议

HTTP:Hypertext Transfer Protocol ,超文本传输协议
HTTP是一个基于“请求与响应”模式的、无状态的应用层协议
HTTP协议采用URL作为定位网络资源的标识,URL格式如下:
http : // host [ :port ] [ path ]

  • host:合法的Internet主机域名或IP地址
  • port:端口号,缺省端口为80
  • path:请求资源的路径

HTTP URL实例:

HTTP URL的理解:

  • URL 是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
GET		<==>requests.get()			#请求获取URL位置的资源
HEAD	<==>requests.head()		#请求获取URL位置资源的响应消息报告,即获得该资源的头部信息
POST	<==>requests.post()		#请求向URL位置的资源后附加新的数据
PUT		<==>requests.put()			#请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH	<==>requests.patch()		#请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETE	<==>requests.delete()		#请求删除URL位置存储的资源

理解PATCH和PUT的区别
假设URL位置有一组数据UserInfo,包括UserID,UserName等20个字段
需求:用户修改了UserName,其他不变

  • 采用PATCH,仅向URL提交UserName的局部更新请求
  • 采用PUT,必须将所有20个字段一并提交到URL,未提交字段被删除

PATCH的最主要好处:节省网络带宽

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值