Python__requests模块的基本使用
1 - 安装和导入
pip install requests import requests
2 - requsts的请求方法
requests.get('https://www.baidu.com/') # GET请求: 请求获取url位置的资源 requests.post('https://www.baidu.com/') # POST请求: 请求向url位置的资源后附加新的数据 requests.put('https://www.baidu.com/') # PUT请求: 请求向url位置存储一个资源,覆盖该位置的原有资源 requests.delete('https://www.baidu.com/') # DELETE请求: 请求删除url位置存储的资源 requests.head('https://www.baidu.com/') # HEAD请求: 请求获取url位置的资源的头部信息 requests.patch('https://www.baidu.com/') # PATCH请求: 请求局部更新url位置的资源 requests.options('https://www.baidu.com/') # OPTIONS请求: 测试服务器是否真的接受请求数据
requests.request() # 构造一个请求,适用于以下的各种请求方法 requests.request(method,url,**kwargs) # method:请求方式,对应get/put/post等7种 # url:拟获取页面的url链接 # **kwargs:控制访问的参数,共13个
3 - 为url传递参数
(1)get方法传参 url_params = {'key':'value'} r = requests.get('your url',params = url_params) # 相当于your url?key=value
(2)post方法传参 使用data参数接受字典参数,request会自动将字典转换成json的请求体数据
4 - 请求的响应结果
r = requests.get('your url',params = url_params) r.encoding # 获取当前的编码 r.encoding = 'utf-8' # 设置编码 r.apparent.encoding # 从内容中分析出的响应内容编码方式(备选编码方式) r.status_code # 响应状态码 r.raw # 返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() r.ok # 查看r.ok的布尔值便可以知道是否登陆成功 r.raise_for_status() # 失败请求(非200响应)抛出异常 r.text # 以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码 r.content # 以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩 r.headers # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None r.json() # Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
5 - post发送json请求
r = requests.post('https://api.github.com/some/endpoint', data=json.dumps({'some': 'data'})) print(r.json())
6 - 定制头和cookie信息
header = {'user-agent': 'xxxxxxxxxxxxxxx'}
cookie = {'key':'value'}
r = requests.get/post('url',headers=header,cookies=cookie)
data = {'some': 'data'}
headers = {'content-type': 'application/json',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
r = requests.post('https://api.github.com/some/endpoint', data=data, headers=headers)
print(r.text)
7 - 超时
r = requests.get('url',timeout=1) #设置秒数超时,仅对于连接有效
8 - 会话对象,能够跨请求保持某些参数
s = requests.Session() s.auth = ('auth','passwd') s.headers = {'key':'value'} r = s.get('url') r1 = s.get('url1')
9 - 代理
proxies = {'http':'ip1','https':'ip2' }
requests.get('url',proxies=proxies)
#设置访问代理
proxies = {
"http": "http://10.10.1.10:3128",
"https": "http://10.10.1.100:4444",
}
r = requests.get('http://m.ctrip.com', proxies=proxies)
#如果代理需要用户名和密码,则需要这样:
proxies = {
"http": "http://user:pass@10.10.1.10:3128/",
}
10 - 异常处理
import requests URL = 'http://ip.taobao.com/service/getIpInfo.php' # 淘宝IP地址库API try: r = requests.get(URL, params={'ip': '8.8.8.8'}, timeout=1) r.raise_for_status() # 如果响应状态码不是 200,就主动抛出异常 except requests.RequestException as e: print(e) else: result = r.json() print(type(result), result, sep='\n')
11 - 上传文件
import requests url = 'http://127.0.0.1:8080/upload' files = {'file': open('/home/rxf/test.jpg', 'rb')} #files = {'file': ('report.jpg', open('/home/lyb/sjzl.mpg', 'rb'))} #显式的设置文件名 r = requests.post(url, files=files) print(r.text)
#request更加方便的是,可以把字符串当作文件进行上传: import requests url = 'http://127.0.0.1:8080/upload' files = {'file': ('test.txt', b'Hello Requests.')} #必需显式的设置文件名 r = requests.post(url, files=files) print(r.text)
12 - 身份验证
基本身份认证(HTTP Basic Auth) import requests from requests.auth import HTTPBasicAuth r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=HTTPBasicAuth('user', 'passwd')) # r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=('user', 'passwd')) # 简写 print(r.json()) ----------------------------------------------------------------------- 另一种非常流行的HTTP身份认证形式是摘要式身份认证,Requests对它的支持也是开箱即可用的: requests.get(URL, auth=HTTPDigestAuth('user', 'pass')
13 - 示例
import requests # '''requests模块抓取网页源码并保存到文件示例''' html = requests.get("http://www.baidu.com") with open('test.txt', 'w', encoding='utf-8') as f: f.write(html.text)

浙公网安备 33010602011771号