中文官网
pip install requests
官网安装指南:安装requests库
import requests
r = requests.get("http://www.baidu.com")
print("状态码:%d" % r.status_code)
r.encoding = "utf-8"
print("页面信息:%s" % r.text)
方法 | 说明 |
---|---|
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 |
r = requests.get(url)
构造一个向服务器请求资源的Request对象
返回一个包含服务器资源的Response对象,包含从服务器返回的所有相关资源。
requests.get(url,params=None,**kwargs)
url:拟获取页面的url链接
params:url中的额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的参数
def get(url, params=None, **kwargs):
r"""Sends a GET request.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
in the query string for the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response ` object
:rtype: requests.Response
"""
kwargs.setdefault('allow_redirects', True)
return request('get', url, params=params, **kwargs)
其实用request方法进行封装
属性 | 说明 |
---|---|
r.status_code |
HTTP请求的返回状态,200表示连接成功,404或者其他表示失败 |
r.text |
HTTP响应内容的字符串形式,即,url对应的页面内容 |
r.encoding |
从HTTPheader中猜测的响应内容编码方式,找服务器响应头中的charset字段,若charset字段不存在,则认为编码为ISO-8859-1 |
r.apparent_encoding |
从内容中分析出的响应内容编码方式(备选编码方式),分析内容猜测编码方式比较准确 |
r.content |
HTTP响应内容的二进制形式 |
异常 | 说明 |
---|---|
requests.ConnectionError |
网页连接错误异常,如DNS查询失败,拒绝连接等 |
requests.HTTPError |
HTTP错误异常 |
requests.URLRequired |
URL缺失异常 |
requests.TooManyRedirects |
超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout |
连接远程服务器超时异常 |
requests.Timeout |
请求URL超时,产生超时异常 |
异常 | 说明 |
---|---|
r.raise_for_status() |
判断返回的Response状态,如果不是200,产生异常requests.HTTPError |
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status() # 如果状态不是200,引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。
方法 | 说明 |
---|---|
GET | 请求获取URL位置的资源 |
HEAD | 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息 |
POST | 请求向URL位置的资源后附加新的数据 |
PUT | 请求向URL位置存储一个资源,覆盖原URL位置的资源 |
PATCH | 请求局部更新URL位置的资源,即改变该处资源的部分内容 |
DELETE | 请求删除URL位置储存的资源 |
假设URL位置有一组数据UserInfo,包括UserID、UserName等20个字段。
需求:用户修改了UserName,其他不变
PATCH的最主要好处:节省网络带宽
HTTP协议方法 | Requests库方法 | 功能一致性 |
---|---|---|
GET | requests.get() | 一致 |
HEAD | requests.head() | 一致 |
POST | requests.post() | 一致 |
PUT | requests.put() | 一致 |
PATCH | requests.patch() | 一致 |
DELETE | requests.delete() | 一致 |
import requests
url = "http://httpbin.org/get"
r = requests.head(url)
print("r.headers=%s" % r.headers)
print("r.text=%s" % r.text)
输出结果为:
r.headers={'Access-Control-Allow-Credentials': 'true', 'Access-Control-Allow-Origin': '*', 'Content-Encoding': 'gzip', 'Content-Type': 'application/json', 'Date': 'Mon, 18 Nov 2019 15:14:06 GMT', 'Referrer-Policy': 'no-referrer-when-downgrade', 'Server': 'nginx', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'DENY', 'X-XSS-Protection': '1; mode=block', 'Connection': 'keep-alive'}
r.text=
只输出了头部信息,r.text输出信息为空。
结论:head()方法能使用很少的网络流量获取网络资源的概要信息。
1.向URL POST一个字典,自动编码为form(表单)
import requests
payload = {
'key1': 'value1', 'key2': 'value2'}
url = "http://httpbin.org/post"
r = requests.post(url, data=payload)
print(r.text)
输出结果为:
{ ……
"form": {
"key1": "value1",
"key2": "value2"
},
……
}
2.向URL POST一个字符串,自动编码为data
import requests
url = "http://httpbin.org/post"
r = requests.post(url, data='ABC')
print(r.text)
输出结果为:
{ ……
"data": "ABC",
"form": {},
……
}
import requests
payload = {
'key1': 'value1', 'key2': 'value2'}
url = "http://httpbin.org/put"
r = requests.put(url, data=payload)
print(r.text)
输出结果为:
{ ……
"form": {
"key1": "value1",
"key2": "value2"
},
……
}
与post()方法类似,但是put()方法能将原来的数据覆盖掉
requests.request(method,url,**kwargs)
method:请求方式,对应HTTP协议方法和OPTIONS的7种
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)
# OPTIONS是向服务器获取一些服务器跟客户端打交道的参数,并不与获取资源直接相关,使用较少
url:拟获取页面的url链接
**kwargs:13个控制访问的参数,均为可选项
字典或字节序,作为参数增加到url中
import requests
kv = {
'key1': 'value1', 'key2': 'value2'}
url = "http://python123.io/ws"
r = requests.request('GET', url, params=kv)
print(r.url)
结果:
https://python123.io/ws?key1=value1&key2=value2
字典、字节序列或文件对象,作为Request的内容
import requests
kv = {
'key1': 'value1', 'key2': 'value2'}
url = "http://httpbin.org/post"
r = requests.request('POST', url, data=kv)#向URL POST一个字典,自动编码为form
print(-------------------)
body = 'hello world'
r = requests.request('POST', url, data=body)#向URL POST一个字符串,自动编码为data
结果:
{
"args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "value2"
},
……
}
-----------------------------------
{
"args": {},
"data": "hello world",
"files": {},
"form": {},
……
}
JSON格式的数据,作为Request的内容
import requests
kv = {
'key1': 'value1'}
url = "http://httpbin.org/post"
r = requests.request('POST', url, json=kv)
print(r.text)
结果:
{
"args": {},
"data": "{\"key1\": \"value1\"}",
"files": {},
"form": {},
……
"json": {
"key1": "value1"
},
……
}
字典,HTTP定制头
import requests
hd = {
'user-agent': 'Chrome/10'}
url = "http://httpbin.org/post"
r = requests.request('POST', url, headers=hd)
print(r.text)
结果:
{
……
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "0",
"Host": "httpbin.org",
"User-Agent": "Chrome/10"
},
……
}
字典或CookieJar,Request中的cookie
元组,支持HTTP认证功能
字典类型,传输文件
import requests
fs = {
"file": open('file.txt', 'rb')}
url = "https://httpbin.org/post"
r = requests.request("POST", url, files=fs)
print(r.text)
file.txt中的内容为:
Hello World!
这是txt文件的内容!
结果:
{
……
"files": {
"file": "Hello World!\r\n\u8fd9\u662ftxt\u6587\u4ef6\u7684\u5185\u5bb9\uff01"
},
……
}
设定超时时间,秒为单位
import requests
url = "https://httpbin.org/get"
r = requests.request("GET", url, timeout=10)
print(r.text)
如果在timeout时间内,请求内容没有返回,则会抛出一个timeout的异常
字典类型,设定访问代理服务器,可以增加登录认证
例如:
import requests
pxs = {
'http': 'http://user:[email protected]:1234', 'https': 'https://10.10.10.1:4321'}
url = "http://httpbin.org/get"
r = requests.request("GET", url, proxies=pxs)
print(r.text)
True/False,默认为True,重定向开关
True/False,默认为True,获取内容立即下载开关
True/False,默认为True,认证SSL证书开关
本地SSL证书路径
requests.get(url, params=None, **kwargs)
url:拟获取页面的url链接
params:url中的额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的参数
requests.head(url, **kwargs)
url:拟获取页面的url链接
**kwargs:13个控制访问的参数
requests.post(url, data=None, json=None, **kwargs)
url:拟更新页面的url链接
data:字典、字节序列或文件,Request的内容
json:JSON格式的数据,Request的内容
**kwargs:11个控制访问的参数
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:13个控制访问的参数