分类 requests库 下的文章

requesets.request(method,url,kwargs) request 方法有三个参数,method url kwargs
method: 请求方式,对应 GET/HEAD/POST/PUT/PATCH/delete/OPTIONS 7种,大小写严格

前六种介绍过了

OPTIONS 是获取服务器与客户端之间通信参数,与获取资源并不直接相关,用的比较少

requesets.request('GET',url,**kwargs)
requesets.request('HEAD',url,**kwargs)
requesets.request('POST',url,**kwargs)
requesets.request('PUT',url,**kwargs)
requesets.request('PATCH',url,**kwargs)
requesets.request('delete',url,**kwargs)
requesets.request('OPTIONS',url,**kwargs)

url: 指获取 url 链接
**kwargs: 控制访问参数,共13 个, 可选项

13个参数分别如下

1、params: 字典或者字节序列,作为参数增加到 url 中,
使访问链接中增加一些参数,服务器根据参数筛选一些资源,
返回来获取指定的内容

kv = {"key1":"value1","key2":"value2"}
r = requests.request("GET","http://python123.ifno/ws",params=kv)
print(r.url) #会打印: http://python123.ifno/ws?key1=value1&key2=value2


2、data: 字典、字节序列或者文件对象,作为 Request 的内容,
把对象放在 url 链接对应的位置作为数据来存储

kv = {"key1":"value1","key2":"value2"}
r = requests.request("POST","http://python123.ifno/ws",data=kv)
body = "主要内容"
r = requests.request("POST","http://python123.ifno/ws",data=body)


3、json: JSON格式的数据,作为 Request 的内容

kv = {"key1":"value1","key2":"value2"}
r = requests.request("POST","http://python123.ifno/ws",json=kv)


4、headers: 字典,HTTP定制头,想服务器发送请求,服务器看到的是 Chrme10
可以模仿Chrome10向服务器发起访问,服务器会认为是Chrome10浏览器

hd = {"user-agent":"Chrome/10"}
r = requests.request("POST","http://python123.ifno/ws",headers=hd)


5、cookes: 字典或者CookieJar,Request 中的cookie,request库的高级功能


6、auth: 元组,支持HTTP认证功能,request库的高级功能


7、files: 字典类型,传输文件,向服务器传输文件

fs = {"file":open("data.xls","rb")}
r = requests.request("POST","http://python123.ifno/ws",files=fs)


8、timeout: 设定超时时间,秒位单位
如果在设定时间内没有返回内容,那么会有一个 timeout异常

r = requests.request("GET","http://python123.ifno/ws",timeout=10)


9、proxies: 字典类型,设定访问代理服务器,可以增加登录认证
有效隐藏用户抓取网页时的ip地址,有效被防止爬虫你追踪

pxs = {"http":"http://user:[email protected]:1234","https":"https://10.10.10.1:4321"}
r = requests.request("GET","http://python123.ifno",proxies=pxs)


10、allow_redirects: True/False,默认为True ,重定向开关,允不允许对url进行重定向


11、stream: True/False ,默认为 True ,获取内容立即下载开关,默认时允许


12、verify: True/False ,默认为 True ,认证SSL证书开关


13、cert: 本地SSL证书路径

==============================================================================
requests.get(url,params=None,keargs) # get 方法有三个参数,url params kwargs
url: 拟获取页面的 url 链接
params: url 中的额外参数,字典或者字节流格式,可选
**kwargs: 12个控制访问的参数,(request 方法控制访问参数中除了 params 以外的12 种参数)

======
requests.head(url,kwargs) # head 方法有两个参数,url kwargs
url: 拟获取页面的 url 链接
**kwargs: 13 个控制访问的参数(与 request 方法的控制访问参数一样)

======
requests.post(url,data=None,json=None,kwargs) # post 方法有四个参数,url data json kwargs
url: 拟更新页面的url 链接
data: 字典、字节序列或文件,Request 的内容(和 request 方法中控制访问参数中的 data 一样)
json: JSON格式的数据,Request的内容(和 request 方法中控制访问参数中的 json 一样)
**kwargs: 11个控制访问的参数(request 方法控制访问参数中除了 data和json 以外的11个参数一样)

======
requests.put(url,data=None,kwargs) # put 方法有三个参数,url data kwargs
url: 拟更新页面的url 链接
data: 字典、字节序列或文件,Request 的内容(和 request 方法中控制访问参数中的 data 一样)
**kwargs: 12个控制访问的参数(request 方法控制访问参数中除了 data 以外的12个参数一样)

======
requests.patch(url,data=None,kwargs) # patch 方法有三个参数,url data kwargs
url: 拟更新页面的url 链接
data: 字典、字节序列或文件,Request 的内容(和 request 方法中控制访问参数中的 data 一样)
**kwargs: 12个控制访问的参数(request 方法控制访问参数中除了 data 以外的12个参数一样)

======
requests.delete(url,kwargs) # delete 方法有两个参数,url kwargs
url: 拟删除页面的url 链接
**kwargs: 13个控制访问的参数(与 request 方法控制访问参数一样)

======
这样设计时因为后六种方法,的一两种控制访问参数比较常用,
所以就放在了函数的默认参数里面,后面的可选参数比较少用

get 方法时所有方法里面最常用的方法,因为向服务器提交信息和传输资源的时候时严格受限的
服务器不会允许无限制的提交信息和传输资源

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协议对资源的操作
GET 请求获取URL位置的资源
HEAD 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息
POST 请求向URL位置的资源后附加新的数据
PUT 请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH 请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETI 请求删除URL位置存储的资源

获取网页头部信息
r = requests.head("http://www.baidu.com") #发送请求,使用很少的流量
r.headers #返回的头部信息
r.text #展示全部内容时,内容时空

用post()方法提交新增数据
payload = {"key1":"value1","key2":"falue2"} #定义一个字典
r = requests.post("http://httpbin.org/post",date = payload) #post一个字典
print(r.text) #打印新增的信息,会被放在 form 的字段下

如果提交的时字符串,会被放在 data字段下

使用 put() 方法与 post() 方法类似,不同的时,put 方法会覆盖原有的数据

requests.ConnectionError 网络连接错误异常,如DNS查失、拒绝连接等
requests.HTTPError HTTP错误异常
requests.URLRequired URL缺失异常
requests.TooManyRedirects 超过最大重定向次数,产生重定向异常
requests.ConnectTimeout 连接远程服务器超时异常
requests.Timeout 请求URL超时,产生超时异常

raise_for_status() 如果不是200,产生异常requests.HTTPError

爬虫通用代码框架
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))

import requests 导入模块
r = requests.get("http://www.baidu.com",timeout=30) 发送请求
r.status_code 查看返回值 200 表示可以访问,404表示无法访问
r.text 查看页面内容 ,可能是乱码
r.encoding 猜测页面编码,默认是 'ISO-8859-1'
r.apparent_encoding 查看获取到的内容编码,是 'utf-8'
r.encoding = 'utf-8' 改变页面编码位 'utf-8'
r.text 再次查看页面内容,可以正常显示