python——爬虫学习——requests库的使用-(1)

requests库的入门

1.发送请求

导入Requests

>>> import requests

HTTP的请求类型:

1.GET:它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。

2.POST:向URL指定的资源提交数据或附加新的数据。

3.PUT:通常用于向服务器发送请求,如果URI不存在,则要求服务器根据请求创建资源,如果存在,服务器就接受请求内容,并修改URI资源的原始版本。

4.HEAD:只请求页面首部。

5.DELETE:删除服务器上的某资源。

6.OPTIONS: 用于获取当前URL所支持的方法。如果请求成功,会有一个Allow的头包含类似“GET,POST”这样的信息。

发送请求:

>>> r= requests.get("http://httpbin.org/get")
>>> r = requests.post("http://httpbin.org/post")
>>> r = requests.put("http://httpbin.org/put")
>>> r = requests.delete("http://httpbin.org/delete")
>>> r = requests.head("http://httpbin.org/get")
>>> r = requests.options("http://httpbin.org/get")

传递参数

参数说明
params字典或字节序列,作为参数增加到url中
data字典、字节序列或文件对象,作为Request的内容
jsonJSON格式的数据,作为Request的内容
headers字典,HTTP定制头
cookies字典或CookieJar,Request中的cookie
auth元组,支持HTTP认证功能
files字典类型,传输文件
timeout设定超时时间,秒为单位
proxies字典类型,设定访问代理服务器,可以增加登录认证
allow_redirectsTrue/False,默认为True,重定向开关
streamTrue/False,默认为True,获取内容立即下载开关
verifyTrue/False,默认为True,认证SSL证书开关
cert本地SSL证书路径
传递url参数

使用params关键字参数,以一个字典提供参数。

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get("http://httpbin.org/get", params=payload)
>>> print(r.url)
http://httpbin.org/get?key2=value2&key1=value1

字典里值为 None 的键都不会被添加到 URL 的查询字符串里;还可以将一个列表作为值传入:

>>> payload={'admin':'test','key':None,'password':['123456','zxcvbn',None]}
>>> r= requests.post("http://httpbin.org/post",params=payload)
>>> print(r.url)
http://httpbin.org/post?admin=test&password=123456&password=zxcvbn
定制请求头

使用headers作为参数,以一个字典提供参数

>>> url='http://www.baidu.com'
>>> headers={'user-agent':"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
}
>>> r=requests.get(url,headers=headers)
>>> r.text
超时

在经过以 timeout 参数设定的秒数时间之后停止等待响应

>>> requests.get("http://www.baidu.com",timeout=0.001)
Traceback (most recent call last):
  ...
requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='www.baidu.com', port=80): Max retries e
xceeded with url: / (Caused by ConnectTimeoutError(<requests.packages.urllib3.connection.HTTPConnect
ion object at 0x02F66A10>, 'Connection to www.baidu.com timed out. (connect timeout=0.001)'))
发送cookies

使用cookies参数

>>> url = 'http://httpbin.org/cookies'
>>> cookies = dict(cookies_are='test')
>>> r = requests.get(url, cookies=cookies)
>>> r.text
'{"cookies": {"cookies_are": "test"}}'
使用data作为参数,以一个字典提供参数
>>> payload={'admin':'test','password':'123456','yanzhengma':None}
>>> r=requests.post("http://httpbin.org/post",data=payload)
>>> print(r.text)
{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "admin": "test",
    "password": "123456"
  },
  ...
}

requests.get()

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

url : 拟获取页面的url链接

params : url中的额外参数,字典或字节流格式,可选

**kwargs: 12个控制访问的参数

requests.post()

requests.post(url, data=None, json=None, **kwargs)

url : 拟更新页面的url链接

data : 字典、字节序列或文件,Request的内容

json : JSON格式的数据,Request的内容

**kwargs: 12个控制访问的参数

requests.delete()

requests.delete(url, **kwargs)

url : 拟删除页面的url链接

**kwargs: 12个控制访问的参数

requests.request()

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

method : 请求方式,对应get/put/post等7种(比如 requests.request(‘GET’)

url : 拟获取页面的url链接

**kwargs: 控制访问的参数,共13个

2.响应内容

属性说明
r.status_code请求的返回状态,200表示连接成功,404表示失败
r.textHTTP响应内容的字符串形式,即,url对应的页面内容
r.encoding从HTTP header中猜测的响应内容编码方式(如果header中不存在charset,则认为编码为ISO‐8859‐1
r.text根据r.encoding显示网页内容)
r.apparent_encoding从内容中分析出的响应内容编码方式(备选编码方式)
r.contentHTTP响应内容的二进制形式
>>> r=requests.get("http://www.baidu.com")
>>> r.status_code
200
>>> r.encoding
'ISO-8859-1'
>>> r.text
u'<!DOCTYPE html>\r\n<!--STATUS OK--><html>...
>>> r.apparent_encoding
'utf-8'
>>> r.encoding='utf-8'
>>> r.encoding
'utf-8'
>>> r.text
u'<!DOCTYPE html>\r\n<!--STATUS OK--><html>...

快速访问响应cookie

>>> url = 'http://example.com/some/cookie/setting/url'
>>> r = requests.get(url)
>>> r.cookies['example_cookie_name']
'example_cookie_value'

错误与异常

遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。

如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError 异常。

若请求超时,则抛出一个 Timeout 异常。

若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。

所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException。

参考文档

Requests: 让 HTTP 服务人类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值